求笤QvQ
  • 板块P4314 CPU 监控
  • 楼主by_520
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/18 17:21
  • 上次更新2025/1/18 20:40:08
查看原帖
求笤QvQ
1089037
by_520楼主2025/1/18 17:21
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+1;
#define mid (l+r>>1)
#define rs u<<1|1
#define ls u<<1
struct node
{
	int l,r,lazy,d;bool f;
	int pre,ma,maa;
	friend node operator + (node a,node b)
	{
		return {a.l,b.r,0,0,false,0,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,0,x,x};
	}
	else
	{
		bu(ls,l,mid);
		bu(rs,mid+1,r);
		qu(u);
	}
}
void guu(node &a,int d)
{
	if(a.f)a.lazy+=d;
	else a.d+=d;
	a.pre=max(a.pre,a.d);
	a.ma+=d;a.maa=max(a.maa,a.ma);
}
void gu(node &a,int d)
{
	a.lazy=d;a.f=true;
	a.ma=d;a.maa=max(a.maa,d);
}
void qd(int u)
{
	if(t[u].d)
	{
		guu(t[ls],t[u].pre);
		guu(t[rs],t[u].pre);
		guu(t[ls],t[u].d-t[u].pre);
		guu(t[rs],t[u].d-t[u].pre);
		t[u].d=t[u].pre=0;
	}
	if(t[u].f)
	{
		gu(t[ls],t[u].lazy);
		gu(t[rs],t[u].lazy);
		t[u].f=false;
	}
}
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(t[u],d);
	else
	{
		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(t[u],d);
	else
	{
		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
	{
		qd(u);qu(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
	{
		qd(u);qu(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;
}/*
8
1 2 3 4 5 6 7 8
27
P 2 5 2
P 3 5 6
P 1 5 -1
C 2 3 -1
P 2 5 5
A 1 5
C 3 6 10
P 2 7 -5
C 1 5 6
Q 3 7
P 2 5 -3
C 7 8 
P 3 4 5
Q 4 5
P 6 8 -2
C 4 5 -2
C 3 4 5
C 1 1 2
P 1 2 2
A 4 8
P 6 8 -1
C 7 8 -2
A 3 7
P 5 8 1
P 1 6 -3
Q 5 8
A 1 6*/
2025/1/18 17:21
加载中...