epiphanyer @ 2023-06-01 17:37:28
#include <bits/stdc++.h>
#define ls (p<<1)
#define rs ((p<<1)|1)
typedef long long ll;
using namespace std;
const int maxn=1e6+5;
const int INF=-1e9-5;
int n,q,a[maxn],op,opl,opr;
ll opx;
ll t[maxn<<2],taga[maxn<<2],tagc[maxn<<2];
ll smax(ll a,ll b){
return a>b?a:b;
}
void pushup(int p){
t[p]=smax(t[ls],t[rs]);
}
void build(int p,int l,int r){
tagc[p]=INF;
if(l==r){
t[p]=(ll)a[l];
return ;
}
int mid=((l+r)>>1);
build(ls,l,mid);
build(rs,mid+1,r);
pushup(p);
}
void pushdown(int p,int l,int r){
if(tagc[p]!=INF){
t[ls]=tagc[p];
t[rs]=tagc[p];
tagc[ls]=tagc[rs]=tagc[p];
taga[ls]=taga[rs]=0;
tagc[p]=INF;
}
if(taga[p]){
t[ls]+=taga[p];
t[rs]+=taga[p];
taga[ls]+=taga[p];
taga[rs]+=taga[p];
taga[p]=0;
}
}
void change(int p,int l,int r,int ql,int qr,ll k){
if(l>=ql&&r<=qr){
t[p]=k;
tagc[p]=k;
taga[p]=0;
return ;
}
int mid=((l+r)>>1);
pushdown(p,l,r);
if(ql<=mid)change(ls,l,mid,ql,qr,k);
if(qr>mid)change(rs,mid+1,r,ql,qr,k);
pushup(p);
}
void add(int p,int l,int r,int ql,int qr,ll k){
if(l>=ql&&r<=qr){
t[p]+=k;
taga[p]+=k;
return ;
}
int mid=((l+r)>>1);
pushdown(p,l,r);
if(ql<=mid)add(ls,l,mid,ql,qr,k);
if(qr>mid)add(rs,mid+1,r,ql,qr,k);
pushup(p);
}
ll query(int p,int l,int r,int ql,int qr){
if(l>=ql&&r<=qr){
return t[p];
}
int mid=(l+r)>>1;
ll ret=INF;
pushdown(p,l,r);
if(ql<=mid)ret=smax(query(ls,l,mid,ql,qr),ret);
if(qr>mid)ret=smax(query(rs,mid+1,r,ql,qr),ret);
return ret;
}
int main(){
// freopen("P1253_6.in","r",stdin);
// freopen("P1253_6.ans","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
build(1,1,n);
while(q--){
scanf("%d%d%d",&op,&opl,&opr);
if(op==1){
scanf("%lld",&opx);
change(1,1,n,opl,opr,opx);
}
if(op==2){
scanf("%lld",&opx);
add(1,1,n,opl,opr,opx);
}
if(op==3){
printf("%lld\n",query(1,1,n,opl,opr));
}
}
return 0;
}
by epiphanyer @ 2023-06-01 17:37:48
前五个点过了
by whileAK @ 2023-07-15 18:06:26
INF不够狠,要-0x7fffffffffffffff,改完应该就可以了~