0分全WA代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 50005
#define INF 0x3f3f3f3f
using namespace std;
int n,q;
int h[N];
int maxx[N],minn[N];
int lowbit(int x){
return x&(-x);
}
void update(int x){
int lx;
while(x<=n){
minn[x]=maxx[x]=h[x];
lx=lowbit(x);
for(int i=1;i<lx;i<<=1){
minn[x]=min(minn[x],minn[x-i]);
maxx[x]=max(maxx[x],maxx[x-i]);
}
x+=lowbit(x);
}
}
int query_max(int x,int y){
int ans=-INF;
while(y>=x){
ans=max(maxx[y],ans);
y--;
for(;y-lowbit(y)>=x;y-=lowbit(y)){
ans=max(maxx[y],ans);
}
}
return ans;
}
int query_min(int x,int y){
int ans=INF;
while(y>=x){
ans=min(minn[y],ans);
y--;
for(;y-lowbit(y)>=x;y-=lowbit(y)){
ans=min(minn[y],ans);
}
}
return ans;
}
int main(){
scanf("%d %d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%d",&h[i]);
update(i);
}
int maxx,minn,a,b;
for(int i=1;i<=q;i++){
scanf("%d %d",&a,&b);
printf("%d\n",query_max(a,b)-query_min(a,b));
}
return 0;
}
样例输入:
6 3
1
7
3
4
2
5
1 5
4 6
2 2
样例输出:
6
3
0
WA程序输出:
6
6
6