#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int minv[100005][20],maxv[100005][20],arr[100005];
int Q,N,ql,qr;
int main(){
int i,j,k,m,n;
scanf("%d%d",&N,&Q);
for(i=0;i<N;i++){
scanf("%d",&arr[i]);
}
for(i=0;i<N;i++){
maxv[i][0]=arr[i];
minv[i][0]=arr[i];
}
for(j=1;(1<<j)<=N;j++){
for(k=0;k+(1<<j)-1<N;k++){
maxv[k][j]=max(maxv[k][j-1],maxv[k+(1<<(j-1))][j-1]);
minv[k][j]=min(minv[k][j-1],minv[k+(1<<(j-1))][j-1]);
}
}
for(i=0;i<Q;i++){
scanf("%d%d",&ql,&qr);
for(k=0;(1<<(k+1))<=qr-ql+1;k++);
printf("%d\n",max(maxv[ql-1][k],maxv[qr-(1<<k)][k])-min(minv[ql-1][k],minv[qr-(1<<k)][k]));
}
}
nyoj119 RMQ问题
最新推荐文章于 2017-08-09 08:03:48 发布