WA 20 求助
查看原帖
WA 20 求助
556362
qwq___qaq楼主2021/12/24 00:10
#include<bits/stdc++.h>
#define int long long
#define ls k<<1
#define rs k<<1|1
#define inf -1e14
using namespace std;
const int maxn=1e6+5;
int n,m,a[maxn],add[maxn<<2],num[maxn<<2],up[maxn<<2];
inline int read(){
	int res=0,f=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
		f|=(ch=='-'),ch=getchar();
	while(ch>='0'&&ch<='9'){
		res=(res<<1)+(res<<3)+(ch^'0');
		ch=getchar();
	}
	return f?-res:res;
}
void Build(int k,int l,int r){
	up[k]=inf;
	if(l==r){
		num[k]=a[l];
		return;
	}
	int mid=l+r>>1;
	Build(ls,l,mid);
	Build(rs,mid+1,r);
	num[k]=max(num[ls],num[rs]);
}
void pushdown(int k){
	if(add[k]){
		num[ls]+=add[k];
	    num[rs]+=up[k];
	    add[ls]+=add[k];
	    add[rs]+=add[k];
	    up[ls]=up[rs]=inf;
	    add[k]=0;
 	}
}
void modify(int k,int l,int r,int x,int y,int v){
	if(l>=x&&r<=y){
		num[k]+=v;
       	up[k]=inf;
       	add[k]+=v;
       	return;
	}
	int mid=l+r>>1;
	pushdown(k);
	if(x<=mid) modify(ls,l,mid,x,y,v);
	else modify(rs,mid+1,r,x,y,v);
	num[k]=max(num[ls],num[rs]);
}
void Pushdown(int k){
    if(up[k]!=inf){
	    num[ls]=up[k];
	    num[rs]=up[k];
	    add[ls]=add[rs]=0;
	    up[ls]=up[rs]=up[k];
	    up[k]=inf;
 	}
}
void Modify(int k,int l,int r,int x,int y,int v){
	if(x<=l&&r<=y){
     	num[k]=v;
       	up[k]=v;
       	add[k]=0;
       	return;
   	}
   	int mid=l+r>>1;
   	Pushdown(k);
   	if(x<=mid)
   		Modify(ls,l,mid,x,y,v);
 	if(y>mid)
   		Modify(rs,mid+1,r,x,y,v);
   	num[k]=max(num[ls],num[rs]);
}
int query(int k,int l,int r,int x,int y){
	if(l>=x&&r<=y)
		return num[k];
	int mid=l+r>>1,res=inf;
	pushdown(k);
	Pushdown(k);
	if(x<=mid)
		res=max(res,query(ls,l,mid,x,y));
	if(mid<y)
		res=max(res,query(rs,mid+1,r,x,y));
	return res;
}
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;++i)
		a[i]=read();
	Build(1,1,n);
	while(m--){
		int op=read(),b=read(),c=read();
		if(op==1)
	        Modify(1,1,n,b,c,read());
		else if(op==2)
			modify(1,1,n,b,c,read());
		else
			printf("%lld\n",query(1,1,n,b,c));
	}
	return 0;
}
2021/12/24 00:10
加载中...