#include<bits/stdc++.h>
#define N 500005
#define ll long long
using namespace std;
struct Node{
int s[2],fa,val,sum=1,siz=1;
}tr[N<<4];
int n,op,k,root,cnt;
inline void pushUp(int x){
tr[x].siz=tr[tr[x].s[0]].siz+tr[tr[x].s[1]].siz+tr[x].sum;
return ;
}
inline void rotate(int x){
int fax=tr[x].fa;
int k=(tr[fax].s[1]==x);
tr[fax].s[k]=tr[x].s[k^1];
tr[tr[x].s[k^1]].fa=fax;
tr[x].s[k^1]=fax;
tr[fax].fa=x;
tr[tr[fax].fa].s[fax==tr[tr[fax].fa].s[1]]=x;
tr[x].fa=tr[fax].fa;
pushUp(fax);
pushUp(x);
return ;
}
inline void splay(int x,int cnm){
while(tr[x].fa!=cnm){
int fax=tr[x].fa;
if(cnm!=tr[fax].fa){
if((tr[fax].s[0]==x)||(tr[tr[fax].fa].s[0]==fax))
rotate(x);
else
rotate(fax);
}
rotate(x);
}
if(cnm==0)
root=x;
return ;
}
inline void find(int val){
int x=root;
while(tr[x].s[val>tr[x].val]&&val!=tr[x].val)
x=tr[x].s[val>tr[x].val];
splay(x,0);
return ;
}
int get_pre(int val){
find(val);
int x=root;
if(tr[x].val<val)
return x;
x=tr[x].s[0];
while(tr[x].s[1])
x=tr[x].s[1];
return x;
}
int get_suc(int val){
find(val);
int x=root;
if(tr[x].val>val)
return x;
x=tr[x].s[1];
while(tr[x].s[0])
x=tr[x].s[0];
return x;
}
inline void delet(int val){
int pre=get_pre(val);
int suc=get_suc(val);
splay(pre,0);
splay(suc,pre);
int dele=tr[suc].s[0];
if(tr[dele].sum>1){
tr[dele].sum--;
splay(dele,0);
}
else{
tr[suc].s[0]=0;
splay(suc,0);
}
return ;
}
int get_rank_by_value(int val){
find(val);
return tr[tr[root].s[0]].siz;
}
int get_value_by_rank(int num){
int x=root;
while(1){
int chx=tr[x].s[0];
if(tr[chx].siz+tr[x].sum<num){
num-=tr[chx].siz+tr[x].sum;
x=tr[x].s[1];
}
else{
if(tr[chx].siz>=num)
x=tr[x].s[0];
else
break;
}
}
splay(x,0);
return tr[x].val;
}
void insert(int val){
int x=root,hhy=0;
while(x&&tr[x].val!=val){
hhy=x;
x=tr[x].s[val>tr[x].val];
}
if(x)
tr[x].sum++;
else{
x=++cnt;
tr[hhy].s[val>tr[hhy].val]=x;
tr[x].fa=hhy;
tr[x].val=val;
tr[x].siz=tr[x].sum=1;
}
splay(x,0);
return ;
}
int main(){
cin>>n;
insert(-1e9);
insert(1e9);
while(n--){
cin>>op>>k;
if(op==1)
insert(k);
if(op==2)
delet(k);
if(op==3)
cout<<get_rank_by_value(k)<<"\n";
if(op==4)
cout<<get_value_by_rank(k)<<"\n";
if(op==5)
cout<<tr[get_pre(k)].val<<"\n";
if(op==6)
cout<<tr[get_suc(k)].val<<"\n";
}
return 0;
}