记录编号 |
501603 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[Tyvj 1728]普通平衡树 |
最终得分 |
100 |
用户昵称 |
_Itachi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.211 s |
提交时间 |
2018-07-22 16:32:32 |
内存使用 |
23.18 MiB |
显示代码纯文本
//
// putong.cpp
//
//
// Created by apple on 2018/7/20.
//
#include <stdio.h>
using namespace std;
const int maxn=100005*20,zero=1e7+5;
int cnt=1,ch[maxn][2],v[maxn],pos,qx;
void Set(){
scanf("%d",&pos),pos+=zero;bool b;int rt=1;
for(int i=30;~i;i--){
b=pos>>i&1;
if(!ch[rt][b])ch[rt][b]=++cnt;
rt=ch[rt][b],v[rt]++;
}
}
void Del(){
scanf("%d",&pos),pos+=zero;bool b;int rt=1;
for(int i=30;~i;i--){
b=pos>>i&1;
rt=ch[rt][b],v[rt]--;
}
}
int Sum(){
int res=0,rt=1;bool b;
for(int i=30;~i;i--){
b=qx>>i&1;
if(b)res+=v[ch[rt][0]];
rt=ch[rt][b];
}
return res;
}
int Getth(){
scanf("%d",&pos),pos+=zero,qx=pos;return Sum()+1;
}
int Get(){
int rt=1,res=0;
for(int i=30;~i;i--){
if(v[ch[rt][0]]<qx)
qx-=v[ch[rt][0]],rt=ch[rt][1],res|=1<<i;
else rt=ch[rt][0];
}
return res;
}
int Getv(){
scanf("%d",&qx);return Get()-zero;
}
int Getpre(){
scanf("%d",&qx);
qx+=zero,qx=Sum();
return Get()-zero;
}
int Getsuc(){
scanf("%d",&qx);
qx+=zero+1,qx=Sum()+1;
return Get()-zero;
}
int main(){
freopen("phs.in","r",stdin);freopen("phs.out","w",stdout);
int n,o;scanf("%d",&n);
while(n--){
scanf("%d",&o);
if(o==1)Set();
if(o==2)Del();
if(o==3)printf("%d\n",Getth());
if(o==4)printf("%d\n",Getv());
if(o==5)printf("%d\n",Getpre());
if(o==6)printf("%d\n",Getsuc());
}
}