qwq求笤(AC#3#4)
  • 板块P4314 CPU 监控
  • 楼主by_520
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/18 15:50
  • 上次更新2025/1/18 17:20:43
查看原帖
qwq求笤(AC#3#4)
1089037
by_520楼主2025/1/18 15:50
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+1;
#define rs u<<1|1
#define ls u<<1
struct node
{
	int l,r,lazy,d;
	bool f;int ma,maa;
	friend node operator + (node a,node b)
	{
		return {a.l,b.r,0,0,false,max(a.ma,b.ma),max(a.maa,b.maa)};
	}
}t[N<<2];
void qu(int u){t[u]=t[ls]+t[rs];}
void bu(int u,int l,int r)
{
	if(l==r)
	{
		int x;cin>>x;
		t[u]={l,r,0,0,false,x,x};
	}
	else
	{
		int mid=l+r>>1;
		bu(ls,l,mid);
		bu(rs,mid+1,r);
		qu(u);
	}
}
void gu(int u,int d)
{
	t[u].f=true;
	t[u].ma=d;t[u].lazy=d;
	t[u].maa=max(t[u].maa,d);
}
void guu(int u,int d)
{
	t[u].ma+=d;
	if(t[u].f)t[u].lazy+=d;
	else t[u].d+=d;
	t[u].maa=max(t[u].maa,t[u].ma);
}
void qd(int u)
{
	if(t[u].d)
	{
		guu(ls,t[u].d);
		guu(rs,t[u].d);
		t[u].d=0;
	}
	if(t[u].f)
	{
		t[u].f=false;
		gu(ls,t[u].lazy);
		gu(rs,t[u].lazy);
	}
}
void ggu(int u,int ll,int rr,int d)
{
	int l=t[u].l,r=t[u].r;
	if(l>=ll&&r<=rr)guu(u,d);
	else
	{
		int mid=l+r>>1;qd(u);
		if(ll<=mid)ggu(ls,ll,rr,d);
		if(rr>mid)ggu(rs,ll,rr,d);
		qu(u);
	}
}
void gg(int u,int ll,int rr,int d)
{
	int l=t[u].l,r=t[u].r;
	if(l>=ll&&r<=rr)gu(u,d);
	else
	{
		int mid=l+r>>1;qd(u);
		if(ll<=mid)gg(ls,ll,rr,d);
		if(rr>mid)gg(rs,ll,rr,d);
		qu(u);
	}
}
int ask_maa(int u,int ll,int rr)
{
	int l=t[u].l,r=t[u].r;
	if(l>=ll&&r<=rr)return t[u].maa;
	else
	{
		int mid=l+r>>1;qd(u);
		if(rr<=mid)return ask_maa(ls,ll,rr);
		if(ll>mid)return ask_maa(rs,ll,rr);
		return max(ask_maa(ls,ll,rr),ask_maa(rs,ll,rr));
	}
}
int ask_ma(int u,int ll,int rr)
{
	int l=t[u].l,r=t[u].r;
	if(l>=ll&&r<=rr)return t[u].ma;
	else
	{
		int mid=l+r>>1;qd(u);
		if(rr<=mid)return ask_ma(ls,ll,rr);
		if(ll>mid)return ask_ma(rs,ll,rr);
		return max(ask_ma(ls,ll,rr),ask_ma(rs,ll,rr));
	}
}
int n,m;
int main()
{/*
	freopen("P4314_1.in","r",stdin);
	freopen("666.out","w",stdout);*/
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;bu(1,1,n);cin>>m;
	while(m--)
	{
		char op;
		int l,r,d;
		cin>>op>>l>>r;
		if(op=='Q')cout<<ask_ma(1,l,r)<<"\n";
		else if(op=='A')cout<<ask_maa(1,l,r)<<"\n";
		else
		{
			cin>>d;
			if(op=='P')ggu(1,l,r,d);
			else gg(1,l,r,d);
		}
	}
	return 0;
}
2025/1/18 15:50
加载中...