50分求助,测试点6~10都WA
查看原帖
50分求助,测试点6~10都WA
885188
Lemon_City楼主2023/7/28 10:45
#include<iostream>
long long max(long long a,long long b){
	return (a>b)?a:b;
}
using namespace std;
const int N=1e6+10;
#define Inf 100000000000ll
long long lzys[4*N],lzya[4*N],a[N],w[4*N];
void pushup(int u){
	w[u]=max(w[(u<<1)],w[(u<<1)+1]);
}
void build(int u,int l,int r){
	if(l==r){
		w[u]=a[l];
		return ;
	}
	int mid=(l+r)>>1;
	build(u*2,l,mid);
	build(u*2+1,mid+1,r);
	pushup(u);
}
bool InRange(int L,int R,int l,int r){
	return (L>=l)&&(R<=r);
}
bool OutRange(int L,int R,int l,int r){
	return (L>r)||(R<l);
}
void maketags(int u,int x){
	w[u]=x;
	lzya[u]=0;
	lzys[u]=x;
}
void maketaga(int u,int x){
	w[u]+=x;
	(lzys[u]==Inf)?lzya[u]+=x:lzys[u]+=x;
}
void pushdown(int u){
	if(lzys[u]==Inf){
		maketaga(u*2,lzya[u]);
		maketaga(u*2+1,lzya[u]);
		lzya[u]=0;
	}else{
		maketags(u*2,lzys[u]);
		maketags(u*2+1,lzys[u]);
		lzys[u]=Inf;
	}
}
void updatea(int u,int L,int R,int l,int r,int x){
	if(InRange(L,R,l,r)){
		maketaga(u,x);
	}else if(!OutRange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(u);
		updatea(u*2,L,mid,l,r,x);
		updatea(u*2+1,mid+1,R,l,r,x);
		pushup(u);
	}else return;
}
void updates(int u,int L,int R,int l,int r,int x){
	if(InRange(L,R,l,r)){
		maketags(u,x);
	}else if(!OutRange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(u);
		updates(u*2,L,mid,l,r,x);
		updates(u*2+1,mid+1,R,l,r,x);
		pushup(u);
	}else return;
}
long long query(int u,int L,int R,int l,int r){
	if(InRange(L,R,l,r)){
		return w[u];
	}else if(!OutRange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(u);
		return max(query(u*2,L,mid,l,r),query(u*2+1,mid+1,R,l,r));
	}else return -Inf;
}
int main(){
	int n,q;
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}
	for(int i=1;i<=4*n;i++){lzys[i]=Inf;}
	build(1,1,n);
	for(int i=1;i<=q;i++){
		long long opt,l,r,x;
		scanf("%lld",&opt);
		if(opt==1){
			scanf("%lld%lld%lld",&l,&r,&x);
			updates(1,1,n,l,r,x);
		}else if(opt==2){
			scanf("%lld%lld%lld",&l,&r,&x);
			updatea(1,1,n,l,r,x);
		}else{
			scanf("%lld%lld",&l,&r);
			printf("%lld\n",query(1,1,n,l,r));
		}
	}
	return 0;
}
2023/7/28 10:45
加载中...