#include<bits/stdc++.h>
using namespace std;
int cnt,n,opt,x,inf=2147483647;
struct node{
int l,r,tot,size,key,val;
}tr[400005];
int nwnode(int val){
cnt++;
tr[cnt].val=val;
tr[cnt].tot=tr[cnt].size=1;
tr[cnt].key=rand();
return cnt;
}
void push_up(int p){
tr[p].size=tr[p].tot+tr[tr[p].l].size+tr[tr[p].r].size;
}
void youxuan(int &fa){
int ls=tr[fa].l;
tr[fa].l=tr[ls].r;
tr[ls].r=fa;
fa=ls;
push_up(tr[fa].r);
push_up(fa);
}
void zuoxuan(int &fa){
int rs=tr[fa].r;
tr[fa].r=tr[rs].l;
tr[rs].l=fa;
fa=rs;
push_up(tr[fa].l);
push_up(fa);
}
void insert(int &x,int val){
if(!x){
x=nwnode(val);
return;
}
if(tr[x].val==val){
tr[x].tot++;
push_up(x);
return;
}
if(val<tr[x].val){
insert(tr[x].l,val);
if(tr[tr[x].l].key>tr[x].key) youxuan(x);
}else{
insert(tr[x].r,val);
if(tr[tr[x].r].key>tr[x].key) zuoxuan(x);
}
push_up(x);
}
void dlt(int &x,int val){
if(!x) return;
if(tr[x].val==val){
if(tr[x].tot>1){
--tr[x].tot;
push_up(x);
return;
}else if(tr[x].l||tr[x].r){
if(tr[x].l||tr[tr[x].l].key>tr[x].key){
youxuan(x);
dlt(tr[x].r,val);
}else{
zuoxuan(x);
dlt(tr[x].l,val);
}
push_up(x);
}
else x=0;
return;
}
dlt(val<tr[x].val?tr[x].l:tr[x].r,val);
push_up(x);
}
int getrank(int x,int val){
if(!x) return 0;
if(tr[x].val==val) return tr[tr[x].l].size+1;
else if(val<tr[x].val){
return getrank(tr[x].l,val);
}else{
return tr[tr[x].l].size+tr[x].tot+getrank(tr[x].r,val);
}
}
int getval(int x,int k){
if(!x) return 0;
if(tr[tr[x].l].size>=k) return getval(tr[x].l,k);
else if(tr[tr[x].l].size+tr[x].tot>=k) return tr[x].val;
else return getval(tr[x].r,k-tr[x].tot-tr[tr[x].l].size);
}
int getpre(int x,int val){
if(!x) return -inf;
if(val<=tr[x].val) return getpre(tr[x].l,val);
else return max(tr[x].val,getpre(tr[x].r,val));
}
int getsuf(int x,int val){
if(!x) return inf;
if(val>=tr[x].val){
return getsuf(tr[x].r,val);
}
return min(tr[x].val,getsuf(tr[x].l,val));
}
int main(){
cin>>n;
int root=1;
nwnode(inf);
for(int i=1;i<=n;i++){
cin>>opt>>x;
if(opt==1) insert(root,x);
else if(opt==2) dlt(root,x);
else if(opt==3) cout<<getrank(root,x)-1<<'\n';
else if(opt==4) cout<<getval(root,x+1)<<'\n';
else if(opt==5) cout<<getpre(root,x)<<'\n';
else cout<<getsuf(root,x)<<'\n';
}
return 0;
}