请看一下,第一个样例过不了,悬关,谢谢

P1253 扶苏的问题

CLX_brunch @ 2024-07-29 19:28:16

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[5000010],x,y,z,www,b[5000010],q[5000010],d[5000010];
void push1(ll x){
    if(b[x]){
        d[x*2]+=b[x];
        d[x*2+1]+=b[x];
        b[x*2]+=b[x];
        b[x*2+1]+=b[x];
        b[x]=0;
    } 
} 
void push2(ll x){
    if(q[x]!=LONG_LONG_MAX){
        d[x*2]=d[x*2+1]=q[x];
        q[x*2]=q[x*2+1]=q[x];
        b[x*2]=b[x*2+1]=0;
        q[x]=LONG_LONG_MAX;
    }
}
void build(ll s,ll t,ll p){
    if(s==t){
        d[p]=a[s];
        return ;
    } 
    ll m=(t-s)/2+s;
    build(s,m,p*2);
    build(m+1,t,p*2+1);
    d[p]=max(d[p*2],d[p*2+1]);
    return ;
}

void change1(ll l,ll r,ll c,ll s,ll t,ll p){
    if(l<=s&&r>=t){
        d[p]+=c;
        b[p]+=c;
        return ;
    }
    push2(p);
    push1(p);
    ll m=(t-s)/2+s;
    if(l<=m) change1(l,r,c,s,m,p*2);
    if(r>m) change1(l,r,c,m+1,t,p*2+1);
    d[p]=max(d[p*2],d[p*2+1]);
}
void change2(ll l,ll r,ll c,ll s,ll t,ll p){
    if(l<=s&&r>=t){
        d[p]=q[p]=c;
        b[p]=0;
        return ;
    }
    ll m=(t-s)/2+s; 
    push2(p);
    push1(p);
    if(l<=m) change2(l,r,c,s,m,p*2);
    if(r>m) change2(l,r,c,m+1,t,p*2+1);
    d[p]=max(d[p*2],d[p*2+1]);
}
ll getmax(ll l,ll r,ll s,ll t,ll p){
    if(l<=s&&r>=t){
        return d[p];
    }
    ll m=(t-s)/2+s,sum=LONG_LONG_MIN;
    push2(p);
    push1(p);
    if(l<=m) sum=max(sum,getmax(l,r,s,m,p*2));
    if(r>m) sum=max(sum,getmax(l,r,m+1,t,p*2+1));
    return sum;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    build(1,n,1);
    for(int i=1;i<=m;i++){
        cin>>www;
        if(www==1){
            cin>>x>>y>>z;
            change2(x,y,z,1,n,1);
        }
        if(www==2){
            cin>>x>>y>>z;
            change1(x,y,z,1,n,1);
        }
        if(www==3){
            cin>>x>>y;
            cout<<getmax(x,y,1,n,1)<<endl;
        }
    }
    return 0;
}

by CLX_brunch @ 2024-07-30 11:24:38

已过,此贴结


|