单调队列
看着复杂度特别高,但是居然跑的飞快
我们没读进来 一个数,它能影响到的位置就是末尾一直到第一个比他大的,所以我们暴力修改,然后查询的时候O(1)输出就好
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=200500;
int n,mod,e;
int q[M],a[M],tp;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
signed main()
{
n=read();mod=read();char s[4];
for (int i=1;i<=n;i++)
{
scanf("%s",s);int x;
if (s[0]=='A')
{
a[++tp]=(read()+e)%mod;
for (int k=tp;k;k--)
if (q[k]<a[tp]) q[k]=a[tp];
else break;
}
else x=read(),printf("%d\n",e=q[tp-x+1]);
}
return 0;
}