前九个数据过了,就是第十个数据不过,我写的程序如下
#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
char ch=getchar();
int x=0;
while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') {
x=x*10+ch'0';
ch=getchar();
}
return x;
}
inline int max(int a,int b)
{
return a>b?a:b;
}
int a=0;
const int M=200000+10;
int cnt,tree[M*4],p,m;
void change(int k,int l,int r,int x,int v)
{
if(x<l||x>r) return ;
if(l==r&&l==x) {tree[k]=v;return;}
int mid=(l+r)>>1;
change(k*2,l,mid,x,v);
change(k*2+1,mid+1,r,x,v);
tree[k]=max(tree[k*2],tree[k*2+1]);
return ;
}
int query(int k,int l,int r,int x,int y)
{
if(x>r||y<l) return -99999999;
if(x<=l&&y>=r) return tree[k];
int mid=(l+r)>>1;
return max(query(k*2,l,mid,x,y),query(k*2+1,mid+1,r,x,y));
}
int main()
{
m=read(),p=read();
for(int i=1;i<=m;i++)
{
int t;
char ch;
cin>>ch;
if(ch=='A')
{
t=((read()%p)+(a%p))%p;
cnt++;
change(1,1,M,cnt,t);
}
else
{
int x=read();
if(x==0) a=0;
else a=query(1,1,M,cnt-x+1,cnt);
printf("%d\n",a);
}
}
return 0;
}
麻烦各位大佬帮看一下,谢谢。