记录编号 393669 评测结果 AAAAAAAAAAAAAAAAAA
题目名称 [USACO Jan07] 均衡队形 最终得分 100
用户昵称 GravatarHyoi_ctime 是否通过 通过
代码语言 C++ 运行时间 0.414 s
提交时间 2017-04-11 20:42:28 内存使用 30.80 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
 
int N=0,Q=0;
int A[200003][20]={0},B[200003][20]={0};
 
int min(int x,int y){
	if(x<=y)	return x;
	return y;
}
 
int max(int x,int y){
	if(x<=y)	return y;
	return x;
}
 
int RMQ1(int l,int r){
	int k=0;
	while(( 1<<(k+1) )<=r-l+1)	k++;
	return min(A[l][k],A[r-(1<<k)+1][k]);
}
 
int RMQ2(int l,int r){
	int k=0;
	while(( 1<<(k+1) )<=r-l+1)	k++;
	return max(B[l][k],B[r-(1<<k)+1][k]);
}
 
int main(){
	freopen("lineup.in","r",stdin);
	freopen("lineup.out","w",stdout);
	
	scanf("%d%d",&N,&Q);
	for(int i=1;i<=N;++i){	
		scanf("%d",&A[i][0]);
		B[i][0]=A[i][0];
	}
	
	for(int j=1;(1<<j)<=N;++j){
		for(int i=1;i+(1<<j)-1<=N;++i){
			A[i][j]=min(A[i][j-1],A[i+(1<<(j-1))][j-1]);
		}
	}
	
	for(int j=1;(1<<j)<=N;++j){
		for(int i=1;i+(1<<j)-1<=N;++i){
			B[i][j]=max(B[i][j-1],B[i+(1<<(j-1))][j-1]);
		}
	}
	int l=0,r=0,t1=0,t2=0;
	for(int i=1;i<=Q;++i){
		scanf("%d%d",&l,&r);
		if(l>r){
	    int temp=l;
			l=r;
			r=temp;
		}
		t1=RMQ1(l,r);
		t2=RMQ2(l,r);
		printf("%d\n",t2-t1);
	}
	
	
	return 0;
}