#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
struct node{
int ls,rs,val,p,same,sz;
}tree[100005];
int cnt;
void updata(int u){
tree[u].sz=tree[tree[u].ls].sz+tree[tree[u].rs].sz+tree[u].same;
}
int left(int u){
int id=tree[u].rs;
tree[u].rs=tree[id].ls;
tree[id].ls=u;
tree[id].sz=tree[u].sz;
updata(u);
return id;
}
int right(int u){
int id=tree[u].ls;
tree[u].ls=tree[id].rs;
tree[id].rs=u;
tree[id].sz=tree[u].sz;
updata(u);
return id;
}
int insert(int u,int val){
if(u==0){
cnt++;
tree[cnt].ls=tree[cnt].rs=0;
tree[cnt].p=rand();
tree[cnt].same=tree[cnt].sz=1;
tree[cnt].val=val;
return cnt;
}
if(tree[u].val==val){
tree[u].same++;
tree[u].sz++;
return u;
}
else if(tree[u].val>val){
tree[u].ls=insert(tree[u].ls,val);
tree[u].sz++;
if(tree[u].p>tree[tree[u].ls].p){
int o=right(u);
return o;
}
}
else{
tree[u].rs=insert(tree[u].rs,val);
tree[u].sz++;
if(tree[u].p>tree[tree[u].rs].p){
int o=left(u);
return o;
}
}
return u;
}
int del(int u,int val){
if(tree[u].val==val){
tree[u].same--;
tree[u].sz--;
if(tree[u].same==0){
if(tree[u].ls==0||tree[u].rs==0){
return tree[u].ls+tree[u].rs;
}
if(tree[tree[u].ls].p<tree[tree[u].rs].p){
int id=right(u);
tree[id].rs=del(tree[id].rs,val);
return id;
}
else{
int id=left(u);
tree[id].ls=del(tree[id].ls,val);
return id;
}
}
else{
return u;
}
}
else if(tree[u].val<val){
tree[u].sz--;
tree[u].rs=del(tree[u].rs,val);
return u;
}
else{
tree[u].sz--;
tree[u].ls=del(tree[u].ls,val);
return u;
}
}
int pai(int u,int val){
if(u==0) return 0;
if(tree[u].val==val) return tree[tree[u].ls].sz;
else if(tree[u].val>val){
return pai(tree[u].ls,val);
}
else{
return pai(tree[u].rs,val)+tree[u].same+tree[tree[u].ls].sz;
}
}
int ans=0;
void qian(int u,int val){
if(u==0) return;
if(tree[u].val<val){
ans=tree[u].val;
qian(tree[u].rs,val);
}
else{
qian(tree[u].ls,val);
}
}
void hou(int u,int val){
if(u==0) return;
if(tree[u].val>val){
ans=tree[u].val;
hou(tree[u].ls,val);
}
else{
hou(tree[u].rs,val);
}
}
int check(int u,int val){
if(u==0) return 0;
if(tree[tree[u].ls].sz>=val){
return check(tree[u].ls,val);
}
else if(tree[tree[u].ls].sz+tree[u].same>=val){
return tree[u].val;
}
else return check(tree[u].rs,val-(tree[tree[u].ls].sz+tree[u].same));
}
int root=0;
int main(){
srand(time(0));
int _;
scanf("%d",&_);
while(_--){
int o,x;
scanf("%d%d",&o,&x);
if(o==1){
root=insert(root,x);
}
else if(o==2){
root=del(root,x);
}
else if(o==3){
printf("%d\n",pai(root,x)+1);
}
else if(o==4){
printf("%d\n",check(root,x));
}
else if(o==5){
ans=0;
qian(root,x);
printf("%d\n",ans);
}
else{
ans=0;
hou(root,x);
printf("%d\n",ans);
}
}
return 0;
}