#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int MAXN=1000100;
LL root, tot, n;
const LL INF=0x7fffffffffffffffLL;
int opt;
LL x;
struct tree{
LL p,lp,rp,size,val,key,cnt;
}t[MAXN];
void push_up(LL p){
t[p].size=t[t[p].lp].size+t[t[p].rp].size+t[p].cnt;
}
LL New(LL val){
t[++tot].val=val;
t[tot].key=rand();
t[tot].cnt=1;
t[tot].size=1;
t[tot].lp=t[tot].rp=0;
return tot;
}
void build(){
root=New(-INF);
t[root].rp=New(INF);
push_up(root);
}
void zig(LL &p){
LL q=t[p].lp;
t[p].lp=t[q].rp;
t[q].rp=p;
p=q;
push_up(t[p].rp);
push_up(p);
}
void zag(LL &p){
LL q=t[p].rp;
t[p].rp=t[q].lp;
t[q].lp=p;
p=q;
push_up(t[p].lp);
push_up(p);
}
void insert(LL &p, LL val){
if(p==0){
p=New(val);
return;
}
if(val==t[p].val){
t[p].cnt++;
push_up(p);
return;
}
if(val<t[p].val){
insert(t[p].lp, val);
if(t[p].key<t[t[p].lp].key)
zig(p);
}
else{
insert(t[p].rp, val);
if(t[p].key<t[t[p].rp].key)
zag(p);
}
push_up(p);
}
void delet(LL &p, LL val){
if(p==0) return;
if(t[p].val==val){
if(t[p].cnt>1){
t[p].cnt--;
push_up(p);
return;
}
if(t[p].lp||t[p].rp){
if(t[p].rp==0||t[t[p].lp].key>t[t[p].rp].key){
zig(p);
delet(t[p].rp,val);
}
else{
zag(p);
delet(t[p].lp,val);
}
push_up(p);
}
else{
p=0;
}
return;
}
if(val<t[p].val)
delet(t[p].lp,val);
else
delet(t[p].rp,val);
push_up(p);
}
LL GetRank(LL p, LL val){
if(p==0)
return 0;
if(val==t[p].val)
return t[t[p].lp].size+1;
if(val<t[p].val)
return GetRank(t[p].lp,val);
return GetRank(t[p].rp,val)+t[t[p].lp].size+t[p].cnt;
}
LL GetVal(LL p, LL rank){
if(p==0) return INF;
if(t[t[p].lp].size>=rank)
return GetVal(t[p].lp,rank);
if(t[t[p].lp].size+t[p].cnt>=rank)
return t[p].val;
return GetVal(t[p].rp,rank-t[t[p].lp].size-t[p].cnt);
}
LL GetPre(LL val){
LL ans=1;
LL p=root;
while(p){
if(val==t[p].val){
if(t[p].lp>0){
p=t[p].lp;
while(t[p].rp>0) p=t[p].rp;
ans=p;
}
break;
}
if(t[p].val<val&&t[p].val>t[ans].val) ans=p;
p=(val<t[p].val)?t[p].lp:t[p].rp;
}
return t[ans].val;
}
LL GetNext(LL val){
LL ans=2;
LL p=root;
while(p){
if(val==t[p].val){
if(t[p].rp>0){
p = t[p].rp;
while(t[p].lp>0) p=t[p].lp;
ans=p;
}
break;
}
if(t[p].val>val&&t[p].val<t[ans].val) ans=p;
p=(val<t[p].val)?t[p].lp:t[p].rp;
}
return t[ans].val;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
build();
while(n--){
cin>>opt>>x;
if(opt==1) insert(root,x);
else if(opt==2) delet(root,x);
else if(opt==3) cout<<GetRank(root,x)-1<<endl;
else if(opt==4) cout<<GetVal(root,x+1)<<endl;
else if(opt==5) cout<<GetPre(x)<<endl;
else if(opt==6) cout<<GetNext(x)<<endl;
}
return 0;
}