P1253,样例二未过,玄关求调
  • 板块题目总版
  • 楼主xsj4zyc
  • 当前回复19
  • 已保存回复19
  • 发布时间2025/8/5 15:45
  • 上次更新2025/8/5 18:46:29
查看原帖
P1253,样例二未过,玄关求调
778772
xsj4zyc楼主2025/8/5 15:45
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int mmm=-1;
int a[1000010];
struct node{
	int l,r;
	int s,lan,cg;
}tr[3000010];
void qili(int k){
	if(tr[k].cg!=INT_MAX){
		tr[k*2].s=tr[k].cg;
		tr[k*2+1].s=tr[k].cg;
		tr[k*2].cg=tr[k].cg;
		tr[k*2+1].cg=tr[k].cg;
		tr[k*2].lan=0;
		tr[k*2+1].lan=0;
	}
	else if(tr[k].lan){
		tr[k*2].s+=tr[k].lan;
		tr[k*2+1].s+=tr[k].lan;
		tr[k*2+1].lan+=tr[k].lan;
		tr[k*2].lan+=tr[k].lan;
	}
	tr[k].cg=INT_MAX;
    tr[k].lan=0;
}
int cx(int k,int ll,int rr){
	if(ll<=tr[k].l&&tr[k].r<=rr){
		return tr[k].s;
	}
	qili(k);
	int mid=(tr[k].l+tr[k].r)/2;
	int maxn=INT_MIN;
	if(ll<=mid){
		maxn=max(cx(k*2,ll,mid),maxn);
	}
	if(mid<rr){
		maxn=max(cx(k*2+1,mid+1,rr),maxn);
	}
	return maxn;
}
void xg(int k,int ll,int rr,int sum,int f){
	if(ll<=tr[k].l&&tr[k].r<=rr){
		if(f){
			tr[k].s=sum;
			tr[k].cg=sum;
			tr[k].lan=0;
			cout<<k<<endl;
		}
		else{
			tr[k].s+=sum;
		    tr[k].lan+=sum;
		}
		return;
	}
	int mid=(tr[k].l+tr[k].r)/2;
	if(ll<=mid){
		xg(k*2,ll,rr,sum,f);
	}
	if(rr>mid){
		xg(k*2+1,ll,rr,sum,f);
	}
	tr[k].s=max(tr[k*2].s,tr[k*2+1].s);
}
void build(int k,int ll,int rr){
	mmm=max(mmm,k);
	tr[k].l=ll;
	tr[k].r=rr;
	tr[k].lan=0;
	tr[k].cg=INT_MAX;
	if(ll==rr){
		tr[k].s=a[ll];
		return;
	}
	build(k*2,ll,(ll+rr)/2);
	build(k*2+1,(ll+rr)/2+1,rr);
	tr[k].s=max(tr[k*2].s,tr[k*2+1].s);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,1,n);
	for(int i=1;i<=mmm;i++){
		cout<<i<<" "<<tr[i].l<<" "<<tr[i].r<<" "<<tr[i].s<<endl;
	}
	for(int i=1;i<=m;i++){
		int flag;
		cin>>flag;
		if(flag==1){
			int x,y,ans;
			cin>>x>>y>>ans;
			xg(1,x,y,ans,1);
		}
		else if(flag==2){
			int x,y,ans;
			cin>>x>>y>>ans;
			xg(1,x,y,ans,0);
		}
		else {
			int x,y;
			cin>>x>>y;
			cout<<cx(1,x,y)<<endl;
		}
	}
	for(int i=1;i<=mmm;i++){
		cout<<i<<" "<<tr[i].l<<" "<<tr[i].r<<" "<<tr[i].s<<endl;
	}
	return 0;
}
2025/8/5 15:45
加载中...