P1253 90pts一个点WA 求调 马蜂标准
  • 板块题目总版
  • 楼主Const_AKer
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/2 23:06
  • 上次更新2024/10/3 10:18:25
查看原帖
P1253 90pts一个点WA 求调 马蜂标准
1038686
Const_AKer楼主2024/10/2 23:06

rt
线段树做法
ss维护区间最大值
t1t_{1}是区间赋值的懒标记
t2t_{2}是区间加的懒标记
评测记录 原题链接

#include<bits/stdc++.h>
#define int long long
#define ls (p<<1)
#define rs ((p<<1)+1)
#define mid ((l+r)>>1)
using namespace std;
const int N=1000005;
const int inf=1e18;
int n,q,i,a[N],op,l,r,x;
struct sqt
{
	int s[N*4],t1[N*4],t2[N*4];
	void pushup(int p)
	{
		s[p]=max(s[ls],s[rs]);
	}
	void addtag1(int p,int x)
	{
		s[p]=x;
		t2[p]=0;
		t1[p]=x;
	}
	void addtag2(int p,int x)
	{
		s[p]+=x;
		t2[p]+=x;
	}
	void pushdown(int p)
	{
		if(t1[p])
		{
			addtag1(ls,t1[p]);
			addtag1(rs,t1[p]);
			t1[p]=0;
		}
		if(t2[p])
		{
			addtag2(ls,t2[p]);
			addtag2(rs,t2[p]);
			t2[p]=0;
		}
	}
	void build(int p,int l,int r)
	{
		if(l==r)
		{
			s[p]=a[l];
			return;
		}
		build(ls,l,mid);
		build(rs,mid+1,r);
		pushup(p);
	}
	void chg(int p,int l,int r,int L,int R,int x)
	{
		if(R<l||L>r) return;
		if(L<=l&&r<=R) return addtag1(p,x);
		pushdown(p);
		chg(ls,l,mid,L,R,x);
		chg(rs,mid+1,r,L,R,x);
		pushup(p);
	}
	void add(int p,int l,int r,int L,int R,int x)
	{
		if(R<l||L>r) return;
		if(L<=l&&r<=R) return addtag2(p,x);
		pushdown(p);
		add(ls,l,mid,L,R,x);
		add(rs,mid+1,r,L,R,x);
		pushup(p);
	}
	int ask(int p,int l,int r,int L,int R)
	{
		if(R<l||L>r) return (inf*(-1));
		if(L<=l&&r<=R) return s[p];
		pushdown(p);
		return max(ask(ls,l,mid,L,R),ask(rs,mid+1,r,L,R));
	}
}xds;
signed main()
{
	ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
	cin>>n>>q;
	for(i=1;i<=n;i++) cin>>a[i];
	xds.build(1,1,n);
	while(q--)
	{
		cin>>op;
		if(op==1)
		{
			cin>>l>>r>>x;
			xds.chg(1,1,n,l,r,x);
		}
		if(op==2)
		{
			cin>>l>>r>>x;
			xds.add(1,1,n,l,r,x);
		}
		if(op==3)
		{
			cin>>l>>r;
			cout<<xds.ask(1,1,n,l,r)<<'\n';
		}
	}
	return 0;
}
2024/10/2 23:06
加载中...