求调
  • 板块学术版
  • 楼主czh012
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/18 17:14
  • 上次更新2025/1/18 20:36:33
查看原帖
求调
1458109
czh012楼主2025/1/18 17:14

P1253扶苏的问题P1253 扶苏的问题
WA 0分

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m,a[N],s,o,d,g;
struct node{ 
	int l,r,sum,tag,tag2;
}tre[N<<2];
void pushup(int num){
	tre[num].sum=max(tre[num<<1].sum,tre[num<<1|1].sum);
}
void pushdown(int num){
	if(tre[num].tag!=0){
		tre[num<<1].tag+=tre[num].tag;
		tre[num<<1|1].tag+=tre[num].tag;
		tre[num<<1].sum+=tre[num].tag;
		tre[num<<1|1].sum+=tre[num].tag;
		tre[num].tag=0;
	}
	if(tre[num].tag2!=INT_MIN){
		tre[num<<1].tag=tre[num<<1|1].tag=0;
		tre[num<<1].tag2=tre[num<<1|1].tag2=tre[num].tag2;
		tre[num<<1].sum=tre[num<<1|1].sum=tre[num].tag2;
		tre[num].tag2=INT_MIN;
	}
}
void build(int num,int ll,int rr){
	tre[num].l=ll;
	tre[num].r=rr;
	tre[num].tag=0;
	tre[num].tag2=INT_MIN;
	if(ll==rr){
		tre[num].sum=a[ll];
		return ;
	}
	int mid=ll+rr>>1;
	build(num<<1,ll,mid);
	build(num<<1|1,mid+1,rr);
	pushup(num);
}
void modify(int num,int L,int R,int x){
	if(tre[num].r<L||tre[num].l>R)return ;
	if(tre[num].l>=L && tre[num].r<=R){
		tre[num].sum+=x; 
		tre[num].tag+=x;
		return ; 
	}			
	pushdown(num);
	modify(num<<1,L,R,x);
	modify(num<<1|1,L,R,x);
	pushup(num);
}				
void modify2(int num,int L,int R,int x){
	if(tre[num].r<L||tre[num].l>R)return ;
	if(tre[num].l>=L && tre[num].r<=R){
		tre[num].sum=x;
		tre[num].tag2=x;
		tre[num].tag=0;
		return ;
	}
	pushdown(num);
	modify(num<<1,L,R,x);
	modify(num<<1|1,L,R,x);
	pushup(num);
}
int query(int num,int L,int R){
	if(tre[num].r<L||tre[num].l>R)return 0;
	if(tre[num].l>=L && tre[num].r<=R)return tre[num].sum;
	pushdown(num);
	return max(query(num<<1,L,R),query(num<<1|1,L,R));
} 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,1,n);
	while(m--){
		cin>>s;
		if(s==1){
			cin>>o>>d>>g;
			modify2(1,o,d,g);
		}
		else if(s==2){
			cin>>o>>d>>g;
			modify(1,o,d,g);
		}
		else{
			cin>>o>>g;
			cout<<query(1,o,g)<<endl;
		}
//		for(int i=1;i<=n;i++){
//			cout<<query(1,i,i)<<" ";
//		}
//		cout<<endl;
	}
	return 0;
} 

modify2函数目的为赋值,但运行时变成增值
蒟蒻百思不得解,求大佬提点

2025/1/18 17:14
加载中...