#include<bits/stdc++.h>
#define N 100010
using namespace std;
int n,m,root;
int cnt,w[N],val[N],h[N],sz[N],ls[N],rs[N];
void upd(int p)
{
sz[p]=sz[ls[p]]+sz[rs[p]]+w[p];
h[p]=max(h[ls[p]],h[rs[p]])+1;
}
int get_b(int p)
{
return h[ls[p]]-h[rs[p]];
}
void le(int &p)
{
int t=rs[p];
rs[p]=ls[t];
ls[t]=p;
upd(p),upd(t);
p=t;
}
void ri(int &p)
{
int t=ls[p];
ls[p]=rs[t];
rs[t]=p;
upd(p),upd(t);
p=t;
}
void insert(int &p,int k)
{
if(!p)
{
p=++cnt;
w[p]=sz[p]=1,val[p]=k;
return ;
}
sz[p]++;
if(k==val[p]) {w[p]++;return;}
if(k<val[p])
{
insert(ls[p],k);
if(get_b(p)==2)
{
if(get_b(ls[p])==1) ri(p);
else le(ls[p]),ri(p);
}
}
else
{
insert(rs[p],k);
if(get_b(p)==-2)
{
if(get_b(rs[p])==-1) le(p);
else ri(rs[p]),le(p);
}
}
upd(p);
}
int ans=0;
void up(int p,int k)
{
if(!p) return;
if(val[p]<k) ans=p,up(rs[p],k);
else up(ls[p],k);
}
void dw(int p,int k)
{
if(!p) return;
if(val[p]>k) ans=val[p],dw(ls[p],k);
else dw(rs[p],k);
}
void del(int &p,int k)
{
if(!p) return ;
if(k<val[p]) del(ls[p],k);
else if(k>val[p]) del(rs[p],k);
else{
if(w[p]>1) {w[p]--;return;}
if(!ls[p]||!rs[p]) {p=ls[p]+rs[p];return;}
ans=0;
up(p,val[p]);
int u=ans;
val[p]=val[u],w[p]=w[u];
del(ls[p],val[u]);
}
if(p!=0)
{
if(get_b(p)==2)
{
if(get_b(ls[p])==1) ri(p);
else le(ls[p]),ri(p);
}
if(get_b(p)==-2)
{
if(get_b(rs[p])==-1) le(p);
else ri(rs[p]),le(p);
}
upd(p);
}
}
int rnk(int p,int k)
{
if(!p) return 1;
if(val[p]==k) return sz[ls[p]]+1;
if(k<val[p]) return rnk(ls[p],k);
else return sz[ls[p]]+w[p]+rnk(rs[p],k);
}
int grnk(int p,int k)
{
if(!p) return 0;
if(k<=sz[ls[p]]) return grnk(ls[p],k);
else if(k>sz[ls[p]]+w[p]) return grnk(rs[p],k-sz[ls[p]]-w[p]);
else return val[p];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
while(n--)
{
int opt,x;
cin>>opt>>x;
if(opt==1) insert(root,x);
if(opt==2) del(root,x);
if(opt==3) cout<<rnk(root,x)<<"\n";
if(opt==4) cout<<grnk(root,x)<<"\n";
if(opt==5) ans=0,up(root,x),cout<<val[ans]<<"\n";
if(opt==6) ans=0,dw(root,x),cout<<ans<<"\n";
}
return 0;
}
(本人菜,不会用指针)