记录编号 371664 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 [HZOI 2016]tb的平衡树 最终得分 100
用户昵称 Gravatar_Itachi 是否通过 通过
代码语言 C++ 运行时间 4.933 s
提交时间 2017-02-16 16:33:21 内存使用 1.73 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char ch;int ff;inline void R_int(int &x){
	while(ch=getchar(),ch<'!');
	if(ch=='-')ch=getchar(),ff=-1;else ff=1;
	x=ch-48;
	while(ch=getchar(),ch>'!')x=x*10+ch-48;
	x*=ff;
}
const int SIZEN=32768,maxn=SIZEN*4+5,INF=0x3f3f3f3f,N=16;
struct Rabit_tree{
	int RT,ch[maxn][2],size[maxn],cnt;
	Rabit_tree(){RT=cnt=1;}
	int sz(){return size[RT];}
	void set(int key,int v=1){
		int p=RT;bool c;size[p]+=v;
		for(int i=N;~i;i--){
			c=key>>i&1;
			if(!ch[p][c])ch[p][c]=++cnt;
			p=ch[p][c],size[p]+=v;
		}
	}
	int sum(int key){
		key++;int p=RT,res=0;bool c;
		for(int i=N;~i;i--){
			c=key>>i&1;
			if(c)res+=size[ch[p][0]];
			p=ch[p][c];
		}
		return res;
	}
	int get(int th){
		int p=RT,res=0;
		for(int i=N;~i;i--){
			if(th>size[ch[p][0]])
				res|=1<<i,th-=size[ch[p][0]],p=ch[p][1];
			else p=ch[p][0];
		}
		return res;
	}
}Trie;
int main(){
	freopen("tb_kp.in","r",stdin);freopen("tb_kp.out","w",stdout);
	int n,ope,x,th;R_int(n);
	while(n--){
		R_int(ope);
		if(ope==7)printf("%d\n",Trie.get(1)-SIZEN);
		else if(ope==8)printf("%d\n",Trie.get(Trie.sz())-SIZEN);
		else{
			R_int(x);
			if(ope==1)Trie.set(x+SIZEN,1);
			else if(ope==2)Trie.set(x+SIZEN,-1);
			else if(ope==3)printf("%d\n",Trie.sum(x+SIZEN-1)+1);
			else if(ope==4)printf("%d\n",Trie.get(x)-SIZEN);
			else if(ope==5){
				th=Trie.sum(x+SIZEN-1)+1;
				printf("%d\n",th==1?-INF:Trie.get(th-1)-SIZEN);
			}
			else {
				th=Trie.sum(x+SIZEN);
				printf("%d\n",th==Trie.sz()?INF:Trie.get(th+1)-SIZEN);
			}
		}
	}
}