大佬看看Wa#6哪里错了😭😭😭
查看原帖
大佬看看Wa#6哪里错了😭😭😭
1385996
ZSYhaouuan楼主2025/2/5 19:03

劳资改半天了,#6老是wa

#include<bits/stdc++.h>
#define ll long long
#define lc x<<1
#define rc x<<1|1
using namespace std;
const ll N=1e6+10;
struct node{
	ll l,r,maxn,lazy_add;
	ll lazy_set=-1e17;
	bool is_set=0;
}tr[N<<2];
ll n,m,a[N];
void pushup(ll x){
	tr[x].maxn=max(tr[lc].maxn,tr[rc].maxn);
	return;
}
void pushdown(ll x){
	if (tr[x].is_set) {
		tr[lc].maxn = tr[x].lazy_set;
		tr[rc].maxn = tr[x].lazy_set;
		tr[lc].lazy_set = tr[x].lazy_set;
		tr[rc].lazy_set = tr[x].lazy_set;
		tr[lc].lazy_add = 0;
		tr[rc].lazy_add = 0;
		tr[lc].is_set=1;
		tr[rc].is_set=1;
		tr[x].is_set=0;
	}
	if (tr[x].lazy_add) {
		tr[lc].maxn += tr[x].lazy_add;
		tr[rc].maxn += tr[x].lazy_add;
		tr[lc].lazy_add += tr[x].lazy_add;
		tr[rc].lazy_add += tr[x].lazy_add;
		tr[x].lazy_add = 0;
	}
	return;
}
void build(ll x,ll l,ll r){
	tr[x].l=l;tr[x].r=r;
	if(l==r){
		tr[x].maxn=a[l];
		return;
	}
	ll m=(l+r)>>1;
	build(lc,l,m);
	build(rc,m+1,r);
	pushup(x);
	return;
}
void change_add(ll x,ll l,ll r,ll k){
	if(l<=tr[x].l&&tr[x].r<=r){
		tr[x].maxn+=k;
		tr[x].lazy_add+=k;
		return;
	}
	pushdown(x);
	ll m=(tr[x].l+tr[x].r)>>1;
	if(l<=m) change_add(lc,l,r,k);
	if(r>m) change_add(rc,l,r,k);
	pushup(x);
	return;
}
void change_set(ll x,ll l,ll r,ll k){
	if(l<=tr[x].l&&tr[x].r<=r){
		tr[x].maxn=k;
		tr[x].lazy_set=k;
		tr[x].lazy_add=0;
		tr[x].is_set=1;
		return;
	}
	pushdown(x);
	ll m=(tr[x].l+tr[x].r)>>1;
	if(l<=m) change_set(lc,l,r,k);
	if(r>m) change_set(rc,l,r,k);
	pushup(x);
	return;
}
ll fin(ll x,ll l,ll r){
	if(l<=tr[x].l&&tr[x].r<=r) return tr[x].maxn;
	pushdown(x);
	ll m=(tr[x].l+tr[x].r)>>1,maxm=-1e10;
	if(l<=m) maxm=max(maxm,fin(lc,l,r));
	if(r>m) maxm=max(maxm,fin(rc,l,r));
	return maxm;
}
int main(){
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(ll i=1;i<=n;i++) cin>>a[i];
	build(1,1,n);
	for(ll i=1;i<=m;i++){
		ll op,l,r,x;
		cin>>op;
		if(op==1){
			cin>>l>>r>>x;
			change_set(1,l,r,x);
		}else if(op==2){
			cin>>l>>r>>x;
			change_add(1,l,r,x);
		}else if(op==3){
			cin>>l>>r;
			cout<<fin(1,l,r)<<"\n";
		}
	}
	return 0;
}
2025/2/5 19:03
加载中...