蒟蒻代码求调
查看原帖
蒟蒻代码求调
1056908
封禁用户楼主2024/1/4 15:49

RT,AC#1,#3,其余WA

#include<bits/stdc++.h>
using namespace std;
//#define debug puts("I AK IOI");
#define int long long
#define pl (p>>1)
#define pr ((p>>1)|1)
const int N=1e6+1000,inf=LONG_LONG_MAX; 
int n,q,op,l,r,x,a[N],tr[N<<2],lz1[N<<2],lz2[N<<2];
void push_down(int p){
	if(lz1[p]!=inf)tr[pl]=lz1[pl]=tr[pr]=lz1[pr]=lz1[p],lz2[pl]=lz2[pr]=0,lz1[p]=inf;
	lz2[pl]+=lz2[p],lz2[pr]+=lz2[p],tr[pl]+=lz2[p],tr[pr]+=lz2[p],lz2[p]=0;
}void push_up(int p){
	tr[p]=max(tr[pl],tr[pr]);
}void update1(int l,int r,int le,int ri,int v,int p){
	if(l==le&&r==ri)return lz1[p]=v,lz2[p]=0,tr[p]=v,void();
	int mid=l+r>>1;
	push_down(p);
	if(ri<=mid)update1(l,mid,le,ri,v,pl); 
	else if(le>mid)update1(mid+1,r,le,ri,v,pr);
	else update1(l,mid,le,mid,v,pl),update1(mid+1,r,mid+1,ri,v,pr);
	push_up(p);
}void update2(int l,int r,int le,int ri,int v,int p){
	if(l==le&&r==ri)return lz2[p]+=v,tr[p]+=v,void();
	int mid=l+r>>1;
	push_down(p);
	if(ri<=mid)update2(l,mid,le,ri,v,pl); 
	else if(le>mid)update2(mid+1,r,le,ri,v,pr);
	else update2(l,mid,le,mid,v,pl),update2(mid+1,r,mid+1,ri,v,pr);
	push_up(p);
}int query(int l,int r,int le,int ri,int p){
	if(l==le&&r==ri)return tr[p];
	int mid=l+r>>1,ret;
	push_down(p);
	if(ri<=mid)ret=query(l,mid,le,ri,pl);
	else if(le>mid)ret=query(mid+1,r,le,ri,pr);
	else ret=max(query(l,mid,le,mid,pl),query(mid+1,r,mid+1,ri,pr));
	return ret;
}void build(int l,int r,int p){
	lz1[p]=inf;
	if(l==r)return tr[p]=a[l],void();
	int mid=l+r>>1;
	build(l,mid,pl),build(mid+1,r,pr),push_up(p);
}signed main(){
	ios::sync_with_stdio(0);cin.tie(),cout.tie();
    cin>>n>>q;
    for(int i=1;i<=n;i++)cin>>a[i];
    build(1,n,1);
    while(q--){
		cin>>op;
		if(op==1)cin>>l>>r>>x,update1(1,n,l,r,x,1);
		else if(op==2)cin>>l>>r>>x,update2(1,n,l,r,x,1);
		else cin>>l>>r,cout<<query(1,n,l,r,1)<<'\n';
    }return 0;
}
2024/1/4 15:49
加载中...