#include<bits/stdc++.h>
using namespace std;
#define ls t[x].ch[0]
#define rs t[x].ch[1]
using namespace std;
int N=100001,cnt;
struct node {
int ch[2],cnt,size,val,rd;
} t[100001];
void up(int x) {
t[x].size=t[t[x].ch[0]].size+t[t[x].ch[1]].size+t[x].cnt;
}
void rotate(int &x,int d) {
int tem= t[x].ch[d];
t[x].ch[d]=t[tem].ch[d^1];
t[tem].ch[d^1]=x;
up(x);
up(tem);
x=tem;
}
void insert(int &x,int val) {
if(!x) {
x=++cnt;
t[x].cnt=t[x].size=1;
t[x].val=val,t[x].rd=rand();
return;
}
t[x].size++;
if(t[x].val == val) {
t[x].cnt++;
return;
}
int d=t[x].val < val;
insert(t[x].ch[d],val);
if(t[x].rd > t[t[x].ch[d]].rd) rotate(x,d);
}
void delet(int &x,int val) {
if(!x) return;
if(t[x].val == val) {
if(t[x].cnt > 1) {
t[x].cnt--;
t[x].size--;
return;
}
bool d=t[ls].rd > t[rs].rd;
if(ls == 0 || rs == 0) x=ls+rs;
else rotate(x,d),delet(x,val);
} else t[x].size--,delet(t[x].ch[t[x].val<val],val);
}
int kth(int root,int k) {
int x=root;
while(1) {
if(k <= t[ls].size) x=ls;
else if(k > t[ls].size+t[x].cnt)
k -= t[ls].size+t[x].cnt,x=rs;
else return t[x].val;
}
}
int rnk(int x,int val) {
if(!x) return 0;
if(t[x].val == val) return t[ls].size+1;
if(t[x].val>val)return rnk(ls,val);
return rnk(rs,val)+t[ls].size+t[x].cnt;
}
int ans;
int pre(int x,int val) {
if(!x)return 1;
if(t[x].val<val) {
ans=t[x].val;
return pre(rs,val);
}
return pre(ls,val);
}
int nxt(int x,int val) {
if(!x)return ans;
if(t[x].val>val) {
ans=t[x].val;
return nxt(ls,val);
}
return nxt(rs,val);
}
int main(){
int t,rt;
cin>>t;
while(t--){
int op,x;
cin>>op>>x;
if(op==1)insert(rt,x);
else if(op==2)delet(rt,x);
else if(op==3)cout<<rnk(rt,x)<<"\n";
else if(op==4)cout<<kth(rt,x)<<"\n";
else if(op==5){
ans=0;
pre(rt,x);
cout<<ans<<"\n";
}
else{
ans=0;
nxt(rt,x);
cout<<ans<<"\n";
}
}
}