21pts
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int n,cnt,rt;
int son[maxn][2],fa[maxn],val[maxn],tot[maxn],siz[maxn];
int read();
void push_up(int u);
bool check(int u);
void rotate(int x);
void splay(int x,int k);
void insert(int x);
void del(int x);
int getrank(int u,int k);
int getval(int u,int k);
int Nxt();
int nxt(int x);
int Pre();
int pre(int x);
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
void push_up(int u){siz[u]=siz[son[u][0]]+siz[son[u][1]]+tot[u];}
bool check(int u){return u==son[fa[u]][1];}
void rotate(int x){
int y=fa[x],z=fa[y],k=check(x);
son[y][k]=son[x][k^1],fa[son[x][k^1]]=y;
son[x][k^1]=y,fa[y]=x;
fa[x]=z;
if(z) son[z][son[z][1]==y]=x;
push_up(x),push_up(y);
}
void splay(int x,int k){
while(fa[x]!=k){
int y=fa[x],z=fa[y];
if(z!=k) check(x)^check(y)?rotate(x):rotate(y);
rotate(x);
}
if(!k) rt=x;
}
void insert(int u,int k){
int f=0;
while(u&&val[u]!=k) f=u,u=son[u][val[u]<k];
if(!u){
u=++cnt;
tot[u]=siz[u]=1;
fa[u]=f,val[u]=k;
if(f) son[f][val[f]<k]=cnt;
}
else tot[u]++;
splay(u,0);
}
int getrank(int u,int k){
if(!u) return 1;
if(val[u]==k){
splay(u,0);
return siz[son[u][0]]+1;
}
if(k<val[u]) return getrank(son[u][0],k);
return getrank(son[u][1],k)+siz[son[u][0]]+tot[u];
}
int getval(int u,int k){
if(!u) return 0;
if(siz[son[u][0]]<k&&k<=siz[son[u][0]]+tot[u]){
splay(u,0);
return val[u];
}
if(k<=siz[son[u][0]]) return getval(son[u][0],k);
return getval(son[u][1],k-siz[son[u][0]]-tot[u]);
}
int Pre(){
int u=son[rt][0];
if(!u) return u;
while(son[u][1]) u=son[u][1];
splay(u,0);
return u;
}
int pre(int x){
insert(rt,x);
int t=Pre();
del(x);
return val[t];
}
int Nxt(){
int u=son[rt][1];
if(!u) return u;
while(son[u][0]) u=son[u][0];
splay(u,0);
return u;
}
int nxt(int x){
insert(rt,x);
int t=Nxt();
del(x);
return val[t];
}
void del(int x){
getrank(rt,x);
if(tot[rt]>1){
tot[rt]--;
push_up(rt);
return;
}
if(!son[rt][0]&&!son[rt][1]){
rt=0;
return;
}
if(!son[rt][0]){
rt=son[rt][1];
fa[rt]=0;
return;
}
if(!son[rt][1]){
rt=son[rt][0];
fa[rt]=0;
}
int u=rt,t=Pre();
fa[son[u][1]]=rt,son[rt][1]=son[u][1];
push_up(rt);
}
int main(){
n=read();
for(int i=1,op,x;i<=n;i++){
op=read(),x=read();
if(op==1) insert(rt,x);
if(op==2) del(x);
if(op==3) printf("%d\n",getrank(rt,x));
if(op==4) printf("%d\n",getval(rt,x));
if(op==5) printf("%d\n",pre(x));
if(op==6) printf("%d\n",nxt(x));
}
return 0;
}