申请加强数据
查看原帖
申请加强数据
1260617
kairuigg楼主2024/4/18 10:25

感觉这个题是数据有些水了,线段树的错误复杂度加个快读就能过,故申请加强数据 (本人线段树水过的代码)

#include <bits/stdc++.h>
using namespace std;
int n,m;
const int maxnn=1e5+5;

inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-'){
            f=-1;
        }
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}

int a[maxnn],maxn[maxnn<<2];

void push_up(int k){
    maxn[k]=max(maxn[k<<1],maxn[k<<1|1]);
}

void buildtree(int k,int l,int r){
    if(l==r){
        maxn[k]=a[l];
        return ;
    }
    int m=(l+r)>>1;
    buildtree(k<<1,l,m);
    buildtree(k<<1|1,m+1,r);
    push_up(k);
}

int query(int k,int l,int r,int x,int y){
    if(x<=l&&y>=r){
        return maxn[k];
    }
    int res=(int)-1e18;
    int m=(l+r)>>1;
    if(x<=m){
        res=max(res,query(k<<1,l,m,x,y));
    }
    if(y>=m+1){
        res=max(res,query(k<<1|1,m+1,r,x,y));
    }
    return res;
}

int main(){
    n=read();
    m=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
    }
    buildtree(1,1,n);
    while(m--){
        int l,r;
        l=read();
        r=read();
        cout<<query(1,1,n,l,r)<<'\n';
    }
    return 0;
}
2024/4/18 10:25
加载中...