P1198求助样例过不掉
  • 板块题目总版
  • 楼主MunYixty
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/21 16:28
  • 上次更新2023/11/3 08:24:49
查看原帖
P1198求助样例过不掉
868365
MunYixty楼主2023/7/21 16:28
#include<bits/stdc++.h> 
using namespace std; 
struct AA
{
	int l,r,mx;
}t[80000005];
int n,mod;
void build(int l,int r,int i)
{
	t[i].l=l;
	t[i].r=r; 
	if(l==r)
	{ 
		return;
	}
	int mid=l+r>>1;
	build(l,mid,i*2);
	build(mid+1,r,i*2+1);
}
int ans=0;
void add(int i,int x,int k)
{
	if(t[i].l==t[i].r)
	{
		t[i].mx=k%mod;
		return;
	}
	int mid=t[i].l+t[i].r>>1; 
	if(x<=mid)
	{
		add(i*2,x,k);
	}
	if(x>mid)
	{
		add(i*2+1,x,k);
	}
	t[i].mx=max(t[i*2].mx,t[i*2+1].mx)%mod;
} 
int ask(int l,int r,int i)
{
	if(t[i].l>=l&&t[i].r<=r)
	{
		return t[i].mx;
	}
	int mid=t[i].l+t[i].r>>1;
	int ans1=-1e9;
	if(l<=mid)ans1=max(ans,ask(l,r,i*2)%mod);
	if(r>mid)ans1=max(ans,ask(l,r,i*2+1)%mod);
	t[i].mx=max(t[i*2].mx,t[i*2+1].mx)%mod;
	return ans1;
}
int cnt=0;

int main()
{  
	
	cin>>n>>mod;
	build(1,n,1);
	for(int i=1;i<=n;i++)
	{
		char op;
		cin>>op;
		if(op=='Q')
		{
			int a;
			cin>>a;
			ans=ask(cnt-a+1,cnt,1); 
			cout<<ans<<endl;
			
		}
		
		if(op=='A')
		{
			int k;
			cin>>k;
			k=(k+ans)%mod;
			++cnt ;
			add(1,cnt,k);  
		}
	} 
    return 0;
}

2023/7/21 16:28
加载中...