wptt @ 2024-03-22 20:55:08
#include<iostream>
#include<vector>
#define int long long
using namespace std;
const int N=1e6+5,inf=1e18;
int n,m,a[N],s[N<<2],add[N<<2],lazy[N<<2];
void pushdown(int k,int l,int r){
int mid=(l+r)/2;
if(lazy[k]!=inf){
s[k*2]=lazy[k];
s[k*2+1]=lazy[k];
lazy[k*2]=lazy[k];
lazy[k*2+1]=lazy[k*2+1];
add[k*2]=add[k*2+1]=0;
}
if(add[k]){
s[k*2]+=add[k];
s[k*2+1]+=add[k];
add[k*2]+=add[k];
add[k*2+1]+=add[k];
add[k]=0;
}
}
void build(int k,int l,int r){
lazy[k]=inf;
if(l==r){
s[k]=a[l];
return;
}
int mid=(l+r)/2;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
s[k]=max(s[k*2],s[k*2+1]);
}
void change1(int k,int l,int r,int x,int y,int v){
if(l>y||r<x){
return;
}
if(x<=l&&r<=y){
s[k]=v;
add[k]=0;
lazy[k]=v;
return;
}
pushdown(k,l,r);
int mid=(l+r)/2;
change1(k*2,l,mid,x,y,v);
change1(k*2+1,mid+1,r,x,y,v);
s[k]=max(s[k*2],s[k*2+1]);
}
void change2(int k,int l,int r,int x,int y,int v){
if(l>y||r<x){
return;
}
if(x<=l&&r<=y){
s[k]+=v;
add[k]+=v;
return;
}
pushdown(k,l,r);
int mid=(l+r)/2;
change2(k*2,l,mid,x,y,v);
change2(k*2+1,mid+1,r,x,y,v);
s[k]=max(s[k*2],s[k*2+1]);
}
int ask(int k,int l,int r,int x,int y){
if(l>y||r<x){
return -inf;
}
if(x<=l&&r<=y){
return s[k];
}
pushdown(k,l,r);
int mid=(l+r)/2;
return max(ask(k*2,l,mid,x,y),ask(k*2+1,mid+1,r,x,y));
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(int i=1,op,l,r,k;i<=m;i++){
cin>>op>>l>>r;
if(op==3){
cout<<ask(1,1,n,l,r)<<'\n';
continue;
}
cin>>k;
if(op==1){
change1(1,1,n,l,r,k);
}
else{
change2(1,1,n,l,r,k);
}
}
return 0;
}
by Usada_Pekora @ 2024-03-22 21:00:34
@zask
void pushdown(int k,int l,int r){
int mid=(l+r)/2;
if(lazy[k]!=inf){
s[k*2]=lazy[k];
s[k*2+1]=lazy[k];
lazy[k*2]=lazy[k];
lazy[k*2+1]=lazy[k]; // 1
add[k*2]=add[k*2+1]=0;
lazy[k] = inf; // 2
}
if(add[k]){
s[k*2]+=add[k];
s[k*2+1]+=add[k];
add[k*2]+=add[k];
add[k*2+1]+=add[k];
add[k]=0;
}
}
by do_it_tomorrow @ 2024-03-22 21:01:40
@Usada_Pekora %%%
by wptt @ 2024-03-22 21:02:51
@do_it_tomorrow @Usada_Pekora %%%