求查错
查看原帖
求查错
261417
asasas楼主2020/11/6 19:55
#include<bits/stdc++.h>
using namespace std;
inline int in(){
     register int x=0,f=1,a;
     char ch=getchar();
     while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
     while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
     return a=x*f;
}
int n,m,a[100005],st[100005][35],aq[100005],stw[100005][35];
int ga(int l,int r){
	int k=log2(r-l+1);
	int mx=max(st[l][k],st[r-(1<<k)+1][k]);
	int mi=min(stw[l][k],st[r-(1<<k)+1][k]);
	return mx-mi;
}
int main(){
	n=in(),m=in();
	for(register int i=1;i<=n;i++) a[i]=in();
//	memset(stw,0x7f,sizeof(stw));
	for(register int i=1;i<=n;i++) st[i][0]=a[i],stw[i][0]=a[i];
	for(register int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
			stw[i][j]=min(stw[i][j-1],stw[i+(1<<(j-1))][j-1]);
		}
	}
	for (register int i=1;i<=m;i++) {
		int x=in(),y=in();
		printf ("%d\n",ga(x,y));
	}
}
2020/11/6 19:55
加载中...