记录编号 269253 评测结果 AAAAAAAAAA
题目名称 [JSOI 2008] 最大数 最终得分 100
用户昵称 GravatarMarvolo 是否通过 通过
代码语言 C++ 运行时间 0.557 s
提交时间 2016-06-13 13:34:52 内存使用 20.34 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;

long long i,n,l,cnt,tt,d;
char c[200010];
long long a[200010];
struct {
	long long l,r,d;
}t[800040];

inline long long max(long long a,long long b){return (a>b)?a:b;}

void maketree(long long x,long long low,long long high){
	long long mid=0;
	t[x].l=low;	t[x].r=high;
	if (low==high)	return;
	mid=(low+high)/2;
	maketree(x*2,low,mid);	maketree(x*2+1,mid+1,high);
	return;
}

void insert(int x,int low,long long k){
	long long mid=0;
	t[x].d=max(t[x].d,k);
	if (t[x].l==t[x].r)	return;
	mid=(t[x].l+t[x].r)/2;
	if (low<=mid)	insert(x*2,low,k);	else insert(x*2+1,low,k);
	return;
}

long long query(long long x,long long low,long long high){
	long long mid=0;
	if (t[x].l==low&&t[x].r==high)	return t[x].d;
	if (t[x].l==t[x].r)	return t[x].d;
	mid=(t[x].l+t[x].r)/2;
	if (high<=mid)	return query(x*2,low,high);	else
	if (low>mid)	return query(x*2+1,low,high);	else
	return max(query(x*2,low,mid),query(x*2+1,mid+1,high));
}

inline long long read(){
	long long x=0,p=0;
	while (p-48<0||p-48>9)	p=getchar();
	while (p-48>=0&&p-48<=9)	{x=x*10+p-48;	p=getchar();}
	return x;
}

int main(){
	freopen("bzoj_1012.in","r",stdin);
	freopen("bzoj_1012.out","w",stdout);
	scanf("%lld%lld",&n,&d);
	for (i=1;i<=n;i++){
		c[i]=getchar();
		while (c[i]!='A'&&c[i]!='Q')	c[i]=getchar();
		if (c[i]=='A')	l++;
		a[i]=read();	}
	maketree(1,1,l);
	tt=0;	cnt=0;
	for (i=1;i<=n;i++) {
		if (c[i]=='A')	{
			long long p=(a[i]+tt)%d;
			insert(1,++cnt,p);
		}
		else {	tt=query(1,cnt-a[i]+1,cnt);
				printf("%lld\n",tt);	}
		}
	return 0;
}