前五个点AC,四个WA,最后一个RE,谢谢大佬
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL NO = 1e15;
const int N = 1e6 + 7;
struct node{
int l,r;
LL ma,add,cov;
}tree[N << 4];
int n,q,op;
int a[N];
int ls(int k){return k<<1;}
int rs(int k){return k<<1|1;}
void f(int p,int v){
tree[p].add += v;
tree[p].ma += v;
}
void push_up(int p){
tree[p].ma = max(tree[ls(p)].ma,tree[rs(p)].ma);
}
void build(int p,int l,int r){
tree[p].l = l,tree[p].r = r,tree[p].cov = NO;
if(l == r){
tree[p].ma = a[l];
return ;
}
int mid = l + r >> 1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
push_up(p);
}
void cover(int p){
if(tree[p].cov == NO) return ;
tree[ls(p)].add = tree[rs(p)].add = 0;
tree[ls(p)].cov = tree[p].cov;
tree[ls(p)].ma = tree[ls(p)].cov;
tree[rs(p)].cov = tree[p].cov;
tree[rs(p)].ma = tree[rs(p)].cov;
tree[p].cov = NO;
}
void push_down(int p){
cover(p);
if(!tree[p].add) return ;
cover(p);
f(ls(p),tree[p].add);
f(rs(p),tree[p].add);
tree[p].add = 0;
}
void change(int p,int x,int y,int v){
if(tree[p].l >= x && tree[p].r <= y){
tree[p].add = 0;
tree[p].cov = v;
tree[p].ma = v;
return ;
}
int mid = tree[p].l + tree[p].r >> 1;
push_down(p);
if(x <= mid) change(ls(p),x,y,v);
if(y > mid) change(rs(p),x,y,v);
push_up(p);
}
void update(int p,int x,int y,int v){
if(tree[p].l >= x && tree[p].r <= y){
cover(p);
tree[p].add += v;
tree[p].ma += v;
return ;
}
int mid = tree[p].l + tree[p].r >> 1;
push_down(p);
if(x <= mid) update(ls(p),x,y,v);
if(y > mid) update(rs(p),x,y,v);
push_up(p);
}
LL query(int p,int x,int y){
if(tree[p].l >= x && tree[p].r <= y)
return tree[p].ma;
push_down(p);
int mid = tree[p].l + tree[p].r >> 1;
LL res = -INT_MAX;
if(x <= mid) res = max(res,query(ls(p),x,y));
if(y > mid) res = max(res,query(rs(p),x,y));
return res;
}
int main(){
scanf("%d%d",&n,&q);
for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
build(1,1,n);
int l,r,x;
while(q--){
scanf("%d%d%d",&op,&l,&r);
if(op == 1){
scanf("%d",&x);
change(1,l,r,x);
}else if(op == 2){
scanf("%d",&x);
update(1,l,r,x);
}else printf("%lld\n",query(1,l,r));
}
return 0;
}