记录编号 501603 评测结果 AAAAAAAAAA
题目名称 [Tyvj 1728]普通平衡树 最终得分 100
用户昵称 Gravatar_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());
    }
}