记录编号 394862 评测结果 AWWWWWWWWWWWWWWWWA
题目名称 [USACO Jan07] 均衡队形 最终得分 11
用户昵称 GravatarTARDIS 是否通过 未通过
代码语言 C++ 运行时间 7.607 s
提交时间 2017-04-14 18:42:01 内存使用 0.54 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstring>
#include<deque>
#define itn int
#define coder goodboy
using namespace std;
typedef long long LL;typedef unsigned long long ULL;
const int maxn=50010;
int a[maxn],bmin[maxn],bmax[maxn],n,m,b,temp1,temp2,ans1,ans2;
inline void in(){
	freopen("lineup.in","r",stdin);
	freopen("lineup.out","w",stdout);
	scanf("%d%d",&n,&m);b=floor(sqrt(n+1));
	for (int i=1;i<=n;i++){
		bmin[i]=1000010,bmax[i]=-1;
	}
	for (int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		bmin[i/b]=min(bmin[i/b],a[i]);
		bmax[i/b]=max(bmax[i/b],a[i]);
	}
}
inline void regular(int l,int r,int &Min,int &Max){
	for (int i=l;i<=r;i++){
		Min=min(Min,a[i]);
		Max=max(Max,a[i]);
	}
}
inline void get(int L,int R,int &Min,int &Max){
	for (int i=L;i<=R;i++){
		Min=min(Min,bmin[i]);
		Max=max(Max,bmax[i]);
	}
}
inline void query(int l,int r,int &Min,int &Max){
	Min=1000010;Max=-1;
	int L=l/b,R=r/b;
	if (l%b){
		if (R-L>2){
			regular(l,r,Min,Max);
			return;
		}
		else{
			regular(l,(L+1)*b,Min,Max);
			if (r%b) regular(R*b,r,Min,Max);
			get(L+1,R,Min,Max);
		}
	}
	else{
		if (R-L<1){
			regular(l,r,Min,Max);
			return;
		}
		else{
			if (r%b) regular(R*b,r,Min,Max);
			get(L,R,Min,Max);
		}
	}
	return;
}
int Main(){
	in();
	for (int i=1;i<=m;i++){
		scanf("%d%d",&temp1,&temp2);
		query(temp1,temp2,ans1,ans2);
		printf("%d\n",ans2-ans1);
	}
	return 0;
}
int main(){;}
int goodboy=Main();