RE求条QWQ

P1253 扶苏的问题

space_P @ 2024-11-24 20:38:01

#include<bits/stdc++.h>
#define endl '\n'
#define intmid int mid=(l+r)>>1
using namespace std;
const int N=1011111,mi=-1111111111;
int n,q,a[N];
int tr[N<<2]={0},lt[N<<2][3]={0};
int fr(){
    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<<3)+(x<<1)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
int ls(int k){
    return k<<1;
}
int rs(int k){
    return (k<<1)|1;
}
void pu(int k){
    tr[k]=tr[ls(k)] > tr[rs(k)] ? tr[ls(k)] : tr[rs(k)];
}
void pd(int k){
    if(lt[k][0]){
        tr[ls(k)]=lt[k][0];
        lt[ls(k)][0]=lt[k][0];
        lt[ls(k)][1]=0;
        tr[rs(k)]=lt[k][0];
        lt[rs(k)][0]=lt[k][0];
        lt[rs(k)][1]=0;
        lt[k][0]=mi;
        return;
    }
    tr[ls(k)]+=lt[k][1];
    lt[ls(k)][1]=lt[k][1];
    tr[rs(k)]+=lt[k][1];
    lt[rs(k)][1]=lt[k][1];
    lt[k][1]=0;
}
void blind(int k,int l,int r){
    lt[k][0]=mi;
    lt[k][1]=0;
    if(l==r){
        tr[k]=a[l];
        return;
    }
    intmid;
    blind(ls(k),l,mid);
    blind(rs(k),mid+1,r);
    pu(k);
}
void ru(int k,int l,int r,int op,int ul,int ur,int x){
    if(ul > r || ur < l) return;
    pd(k);
    if(op^1){
        if(ul <= l && ur >= r){
            lt[k][1]+=x;
        }
        intmid;
        ru(ls(k),l,mid,op,ul,ur,x);
        ru(rs(k),mid+1,r,op,ul,ur,x);
        pu(k);
        return;
    }
    if(ul <= l && ur >= r){
        lt[k][0]=x;
    }
    intmid;
    ru(ls(k),l,mid,op,ul,ur,x);
    ru(rs(k),mid+1,r,op,ul,ur,x);
    pu(k);
}
int rq(int k,int l,int r,int ql,int qr){
    if(l > qr || r < ql) return mi;
    pd(k);
    if(l >= ql && r <= qr) return tr[k];
    intmid;
    return max(rq(ls(k),l,mid,ql,qr),rq(rs(k),mid+1,r,ql,qr));
}
int main(){
    n=fr();q=fr();
    for(int i=1;i<=n;i++){
        a[i]=fr();
    }
    blind(1,1,n);
    while(q--){
        int op=fr();    
        if(op==3){
            int ql=fr(),qr=fr();
            cout<<rq(1,1,n,ql,qr);
            putchar('\n');
        }
        else {
            int ul=fr(),ur=fr(),x=fr();
            ru(1,1,n,op,ul,ur,x);
        }
    }
    return 0;
}

by INTP_A @ 2024-11-25 18:50:16

一眼顶针,没有return。

if(ul <= l && ur >= r){
            lt[k][1]+=x;
        }
if(ul <= l && ur >= r){
        lt[k][0]=x;
    }

|