萌新RE求助
查看原帖
萌新RE求助
399116
LYqwq楼主2022/10/8 21:49
#include <iostream>
#include <cstring>
using namespace std;
template<typename T=int>
inline T read(){
    T X=0; bool flag=1; char ch=getchar();
    while(ch<'0' || ch>'9'){if(ch=='-') flag=0; ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<1)+(X<<3)+(ch^48),ch=getchar();
    if(flag) return X;
    return ~(X-1);
}

template<typename T=int>
inline void write(T X){
    if(X<0) putchar('-'),X=~(X-1);
    T s[20],top=0;
    while(X) s[++top]=X%10,X/=10;
    if(!top) s[++top]=0;
    while(top) putchar(s[top--]+'0');
    putchar('\n');
}

const int N=1e5+5,Log=25;
int n,m,l,r,x;
int a[N];

class ST{
    public:
        ST(int (*_op)(int x,int y)=[](int x,int y)->int{return max(x,y);},
            int _initval=0)
            : op(_op),initval(_initval){}
        void init(int *a,int n){
            memset(f,initval,sizeof(f));
            lg[0]=-1;
            for(int i=1; i<=n; i++) f[i][0]=a[i],lg[i]=lg[i>>1]+1;
            for(int j=1; j<Log; j++)
                for(int i=1; i+(1<<j)-1<=n; i++)
                    f[i][j]=op(f[i][j-1],f[i+(1<<j-1)][j-1]);
        }
        inline int query(int l,int r){
            x=lg[r-l+1];
            return max(f[l][x],f[r-(1<<x)+1][x]);
        }
    private:
        int initval,x;
        int (*op)(int x,int y);
        int lg[Log],f[N][Log];
}st;

int main(){
    n=read(),m=read();
    for(int i=1; i<=n; i++) a[i]=read();
    st.init(a,n);
    while(m--){
        l=read(),r=read();
        write(st.query(l,r));
    }
    return 0;
}

记录

QwQ 好像是数组越界这类问题,但不知道在哪里awa

2022/10/8 21:49
加载中...