#include<bits/stdc++.h>
using namespace std;
int q,op,cnt;
struct node{
int val,key,ch[2];
int tsiz,msiz;
}tree[4000010];
void maintain(int &o){
int sum=0;
if(tree[o].ch[0])sum+=tree[tree[o].ch[0]].tsiz;
if(tree[o].ch[1])sum+=tree[tree[o].ch[1]].tsiz;
tree[o].tsiz=sum+tree[o].msiz;
}
void rotate(int &o,int pos){
int t=tree[o].ch[pos^1];
tree[o].ch[pos^1]=tree[t].ch[pos];
tree[t].ch[pos]=o;
maintain(o);
maintain(t);
o=t;
}
void insert(int &o,int x){
if(o==0){
o=++cnt;
tree[o].msiz=tree[o].tsiz=1;
tree[o].ch[0]=tree[o].ch[1]=0;
tree[o].key=rand();
tree[o].val=x;
return;
}
if(tree[o].val==x){
tree[o].msiz++;
maintain(o);
}
else if(tree[o].val>x){
insert(tree[o].ch[0],x);
maintain(o);
if(tree[tree[o].ch[0]].key>tree[o].key)rotate(o,1);
}
else{
insert(tree[o].ch[1],x);
maintain(o);
if(tree[tree[o].ch[1]].key>tree[o].key)rotate(o,0);
}
}
void remove(int &o,int x){
if(tree[o].val==x){
if(tree[o].msiz>1)tree[o].msiz--;
else{
if(!tree[o].ch[0]&&!tree[o].ch[1])o=0;
else if(!tree[o].ch[0]){
rotate(o,0);
remove(tree[o].ch[0],x);
}
else if(!tree[o].ch[1]){
rotate(o,1);
remove(tree[o].ch[1],x);
}
else{
if(tree[tree[o].ch[0]].key>tree[tree[o].ch[1]].key){
rotate(o,1);
remove(tree[o].ch[1],x);
}
else{
rotate(o,0);
remove(tree[o].ch[0],x);
}
}
}
}
else if(tree[o].val<x){
remove(tree[o].ch[1],x);
}
else{
remove(tree[o].ch[0],x);
}
maintain(o);
}
int find_rk(int o,int x){
int ans=0;
while(o){
int cnt;
if(tree[o].ch[0])cnt=0;else cnt=tree[tree[o].ch[0]].tsiz;
if(tree[o].val<x)o=tree[o].ch[0];
else if(tree[o].val==x){
return ans+cnt+1;
}
else{
ans+=cnt+tree[o].msiz;
o=tree[o].ch[1];
}
}
}
int find_val(int o,int x){
while(o){
int cnt;
if(tree[o].ch[0])cnt=0;else cnt=tree[tree[o].ch[0]].tsiz;
if(cnt>=x)o=tree[o].ch[0];
else if(x<=cnt+tree[o].msiz)return tree[o].val;
else x-=cnt+tree[o].msiz,o=tree[o].ch[1];
}
}
int find_pre(int o,int x){
int pre;
while(o){
if(tree[o].val<x)pre=tree[o].val,o=tree[o].ch[1];
else o=tree[o].ch[0];
}
return pre;
}
int find_nxt(int o,int x){
int nxt;
while(o){
if(tree[o].val>x)nxt=tree[o].val,o=tree[o].ch[0];
else o=tree[o].ch[1];
}
return nxt;
}
int main(){
srand(time(0));
scanf("%d",&q);
int rt=0;
while(q--){
scanf("%d",&op);
int x;
if(op==1){
scanf("%d",&x);
insert(rt,x);
}
if(op==2){
scanf("%d",&x);
remove(rt,x);
}
if(op==3){
scanf("%d",&x);
insert(rt,x);
printf("%d\n",find_rk(rt,x));
remove(rt,x);
}
if(op==4){
scanf("%d",&x);
printf("%d\n",find_val(rt,x));
}
if(op==5){
scanf("%d",&x);
insert(rt,x);
printf("%d\n",find_pre(rt,x));
remove(rt,x);
}
if(op==6){
scanf("%d",&x);
insert(rt,x);
printf("%d\n",find_nxt(rt,x));
remove(rt,x);
}
}
return 0;
}