线段树50pts求条
查看原帖
线段树50pts求条
1236701
dtbigwaves楼主2024/10/31 14:04
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,A=-1e9-10;
long long n,q,a[N];
struct SegmentTree{
	long long l,r,maxn,add,cover;
}t[N*4];
void build(long long p,long long l,long long r){
	t[p].l=l;
	t[p].r=r;
	t[p].cover=A;
	if(l==r){
		t[p].maxn=a[l];
		return;
	}
	long long mid=(l+r)/2;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
	t[p].maxn=max(t[p*2].maxn,t[p*2+1].maxn);
}
void spread1(long long p){
	if(t[p].cover!=A){
		t[p*2].add=0;
		t[p*2+1].add=0;
		t[p*2].maxn=t[p].cover;
		t[p*2+1].maxn=t[p].cover;
		t[p*2].cover=t[p].cover;
		t[p*2+1].cover=t[p].cover;
		t[p].cover=A;
	}
}
void cover(long long p,long long l,long long r,long long d){
	if(l<=t[p].l && r>=t[p].r){
		t[p].maxn=d;
		t[p].cover=d;
		return;
	}
	spread1(p);
	long long mid=(t[p].l+t[p].r)/2;
	if(l<=mid) cover(p*2,l,r,d);
	if(r>mid) cover(p*2+1,l,r,d);
	t[p].maxn=max(t[p*2].maxn,t[p*2+1].maxn);
}
void spread2(long long p){
	if(t[p].add){
		spread1(p);
		t[p*2].maxn+=t[p].add;
		t[p*2+1].maxn+=t[p].add;
		t[p*2].add+=t[p].add;
		t[p*2+1].add+=t[p].add;
		t[p].add=0;
	}
}
void add(long long p,long long l,long long r,long long d){
	if(l<=t[p].l && r>=t[p].r){
		t[p].maxn+=d;
		t[p].add+=d;
		return;
	}
	spread2(p);
	long long mid=(t[p].l+t[p].r)/2;
	if(l<=mid) add(p*2,l,r,d);
	if(r>mid) add(p*2+1,l,r,d);
	t[p].maxn=max(t[p*2].maxn,t[p*2+1].maxn);
}
long long ask(long long p,long long l,long long r){
	if(l<=t[p].l && r>=t[p].r) return t[p].maxn;
	spread1(p);
	spread2(p);
	long long mid=(t[p].l+t[p].r)/2,val=A;
	if(l<=mid) val=max(val,ask(p*2,l,r));
	if(r>mid) val=max(val,ask(p*2+1,l,r));
	return val;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0);
	cin>>n>>q;
	for(long long i=1;i<=n;i++) cin>>a[i];
	build(1,1,n);
	for(long long i=1;i<=q;i++){
		long long op,ll,rr,xx;
		cin>>op;
		if(op==1){
			cin>>ll>>rr>>xx;
			cover(1,ll,rr,xx);
		}
		if(op==2){
			cin>>ll>>rr>>xx;
			add(1,ll,rr,xx);
		}
		if(op==3){
			cin>>ll>>rr;
			cout<<ask(1,ll,rr)<<'\n';
		}
	}
	return 0;
}

2024/10/31 14:04
加载中...