萌新刚学树状数组,爆零求助
查看原帖
萌新刚学树状数组,爆零求助
352603
RainSpark楼主2022/6/27 14:57

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
2022/6/27 14:57
加载中...