记录编号 490157 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]2387 最终得分 100
用户昵称 GravatarShirry 是否通过 通过
代码语言 C++ 运行时间 3.049 s
提交时间 2018-03-07 20:42:22 内存使用 62.11 MiB
显示代码纯文本
#include<map>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lc(x) ch[x][0]
#define rc(x) ch[x][1]
using namespace std;
const int maxn=200010;
const int maxm=maxn*20;
int n,m,cnt,las,a[maxn],siz[maxm],ch[maxm][3];
map<int,int>p;
void updata(int x){
	siz[x]=0;
	if(lc(x))siz[x]+=siz[lc(x)];
	if(rc(x))siz[x]+=siz[rc(x)];
}
void insert(int x,int k,int l,int r,int d){
	if(l==r){siz[x]+=d;return;}
	int mid=(l+r)>>1;
	if(k<=mid){
		if(!lc(x))lc(x)=++cnt;
		insert(lc(x),k,l,mid,d);
	}
	else{
		if(!rc(x))rc(x)=++cnt;
		insert(rc(x),k,mid+1,r,d);
	}
	updata(x);
}
int find(int x,int k,int l,int r){
	if(l==r)return l;
	int mid=(l+r)>>1;
	if(lc(x)){
		if(siz[lc(x)]>=k)return find(lc(x),k,l,mid);
		else{k-=siz[lc(x)];return find(rc(x),k,mid+1,r);}
	}
	else return find(rc(x),k,mid+1,r);
}
int main(){
	freopen("2387_.in","r",stdin);
	freopen("2387_.out","w",stdout);
	scanf("%d%d",&n,&m);
	las=n;int x,k;
	for(int i=1;i<=n;i++){
		scanf("%d",&x);
		a[i]=x;
		if(!p[x])p[x]=++cnt;
		insert(p[x],i,1,n,1);
	}
	char c[50];
	for(int i=1;i<=m;i++){
		scanf("%s",c);
		if(c[0]=='Q'){
			scanf("%d%d",&x,&k);
			x^=las,k^=las;
			if(!p[x]||siz[p[x]]<k)las=0;
			else las=find(p[x],k,1,n);
			printf("%d\n",las);
		}
		else{
			scanf("%d%d",&k,&x);
			x^=las,k^=las;
			insert(p[a[k]],k,1,n,-1);
			if(!p[x])p[x]=++cnt;
			insert(p[x],k,1,n,1);
			a[k]=x;
		}
	}
	return 0;
}