odt03 @ 2022-08-26 12:36:25
AC#1,WA#2#3#4,TLE#5#6#7#8#9,RE#10
#include<bits/stdc++.h>
using namespace std;
const long long INF=114514114514114;
inline int read(){
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*10+ch-48;ch=getchar();
}
return x*f;
}
struct Node{
int l,r;
long long maxn,lazys=-INF,lazyc=-INF;
}tree[4000010];
int n,q,a[1000010];
void pushup(int p){
tree[p].maxn=max(tree[p*2].maxn,tree[p*2+1].maxn);
}
void build(int p,int l,int r){
tree[p].l=l,tree[p].r=r;
if(l==r){
tree[p].maxn=a[l];
return;
}
int mid=(l+r)/2;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
pushup(p);
}
void chdown(int p){
if(tree[p].lazyc!=-INF){
tree[p*2].lazyc=tree[p].lazyc,tree[p*2+1].lazyc=tree[p].lazyc;
tree[p*2].maxn=tree[p].lazyc,tree[p*2+1].maxn=tree[p].lazyc;
tree[p].lazyc=-INF;
}
}
void addown(int p){
if(tree[p].lazys!=-INF){
chdown(p);
tree[p*2].lazys+=tree[p].lazys,tree[p*2+1].lazys+=tree[p].lazys;
tree[p*2].maxn+=tree[p].lazys,tree[p*2+1].maxn+=tree[p].lazys;
tree[p].lazys=-INF;
}
}
void pushdown(int p){
chdown(p),addown(p);
}
void upch(int p,int l,int r,int k){
if(l>=tree[p].l&&tree[p].r<=r){
tree[p].maxn=tree[p].lazyc=k,tree[p].lazys=0;
return;
}
pushdown(p);
int mid=(tree[p].l+tree[p].r)/2;
if(l<=mid)upch(p*2,l,r,k);
if(r>mid)upch(p*2+1,l,r,k);
pushup(p);
}
void upadd(int p,int l,int r,int k){
if(l>=tree[p].l&&tree[p].r<=r){
chdown(p);
tree[p].maxn+=k,tree[p].lazys+=k;
return;
}
pushdown(p);
int mid=(tree[p].l+tree[p].r)/2;
if(l<=mid)upch(p*2,l,r,k);
if(r>mid)upch(p*2+1,l,r,k);
pushup(p);
}
long long query(int p,int l,int r){
if(tree[p].l>=l&&tree[p].r<=r){
return tree[p].maxn;
}
pushdown(p);
long long ans=-INF;
int mid=(tree[p].l+tree[p].r)/2;
if(l<=mid)ans=max(query(p*2,l,r),ans);
if(r>mid)ans=max(query(p*2+1,l,r),ans);
return ans;
}
int main(){
int n,q;
n=read(),q=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
build(1,1,n);
while(q--){
int op,l,r,k;
op=read(),l=read(),r=read();
if(op==1)k=read(),upch(1,l,r,k);
if(op==2)k=read(),upadd(1,l,r,k);
if(op==3)printf("%lld\n",query(1,l,r));
}
return 0;
}
by JEB_Bem @ 2022-08-26 21:51:20
试过
#define int long long
了吗