#include<iostream>
#include<cstdio>
#define int long long
#define inf (1000000000+10)
using namespace std;
const int maxn=100010;
int n,tot,root;
struct Node{
int lc,rc,val,cnt,size,pri;
#define lc(x)t[x].lc
#define rc(x)t[x].rc
#define v(x)t[x].val
#define p(x)t[x].pri
#define c(x)t[x].cnt
#define s(x)t[x].size
}t[maxn];
int Rand(){
static long long res=114514;
return (res*=2333)%inf;
}
void upt(int k){s(k)=s(lc(k))+s(rc(k))+c(k);}
void zig(int &k){
int y=lc(k);
lc(k)=rc(y);
rc(y)=k;
upt(k);k=y;upt(k);
}
void zag(int &k){
int y=rc(k);
rc(k)=lc(y);
lc(y)=k;
upt(k);k=y;upt(k);
}
void insert(int &k,const int &key){
if(!k){
k=++tot;rc(k)=lc(k)=0;
p(k)=Rand();c(k)=s(k)=1;v(k)=key;
return;
}
s(k)++;
if(key==v(k))c(k)++;
else if(key<v(k)){
insert(lc(k),key);
if(p(lc(k))<p(k))zig(k);
}else{
insert(rc(k),key);
if(p(rc(k))<p(k))zag(k);
}
upt(k);return;
}
void del(int &k,const int &key){
if(!k)return;
if(key==v(k)){
if(c(k)>1)c(k)--,s(k)--;
else if(!lc(k)||!rc(k))k=lc(k)+rc(k);
else if(p(lc(k))<p(rc(k)))zig(k),del(k,key);
else zag(k),del(k,key);
}
s(k)--;
if(key<v(k))del(lc(k),key);
else del(rc(k),key);
upt(k);return;
}
int pre(int key){
int x=root,res=-inf;
while(x){
if(key<v(x))x=lc(x);
else res=v(x),x=rc(x);
}
return res;
}
int nex(int key){
int x=root,res=inf;
while(x){
if(key>v(x))x=rc(x);
else res=v(x),x=lc(x);
}
return res;
}
int qkth(int k){
int x=root;
while(x){
if(s(lc(x))<k&&s(lc(x))+c(x)>=k)return v(x);
if(s(lc(x))>=k)x=lc(x);
else k-=(s(lc(x))+c(x)),x=rc(x);
}
return inf;
}
int qrank(int key){
int x=root,res=0;
while(x){
if(key==v(x))return res+s(lc(x))+1;
if(key<v(x))x=lc(x);
else res+=s(lc(x))+c(x),x=rc(x);
}
return res;
}
signed main(){
scanf("%lld",&n);
while(n--){
int op,x;
scanf("%lld%lld",&op,&x);
if(op==1)insert(root,x);
else if(op==2)del(root,x);
else if(op==3)printf("%lld\n",qrank(x));
else if(op==4)printf("%lld\n",qkth(x));
else if(op==5)printf("%lld\n",pre(x));
else if(op==6)printf("%lld\n",nex(x));
}
return 0;
}