#include<bits/stdc++.h>
#define f_inline inline __attribute__((always_inline))
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 5e4+5;
struct Btree{
int lc,rc,pri,val,sze,cnt;
#define lc(x) t[x].lc
#define rc(x) t[x].rc
#define pri(x) t[x].pri
#define v(x) t[x].val
#define s(x) t[x].sze
#define cnt(x) t[x].cnt
}t[maxn<<1];
int rt,tot;
f_inline void push_up(const int &p){
s(p) = s(lc(p))+s(rc(p))+cnt(p);
}
f_inline void Zig(int &p){
int k = lc(p);lc(p) = rc(k),rc(k) = p;
s(k) = s(p); push_up(p);
return p = k,void();
}
f_inline void Zag(int &p){
int k = rc(p);rc(p) = lc(k),lc(k) = p;
s(k) = s(p); push_up(p);
return p = k,void();
}
void Insert(int &p,const int &val){
if(!p){
p = ++tot; v(p) = val; pri(p) = rand();
cnt(p) = s(p) = 1; lc(p) = rc(p) = 0;
return ;
}
++s(p);
if(v(p) == val) ++cnt(p);
else if(val < v(p)){
Insert(lc(p),val);
if(pri(lc(p)) < pri(p)) Zig(p);
}else{
Insert(rc(p),val);
if(pri(rc(p)) < pri(p)) Zag(p);
}
}
void Delete(int &p,const int &val){
if(v(p) == val){
if(cnt(p) > 1) --cnt(p),--s(p);
else if(!lc(p) || !rc(p)) p = lc(p)+rc(p);
else if(pri(lc(p)) < pri(rc(p))) Zig(p),Delete(p,val);
else Zag(p),Delete(p,val);
}
--s(p);
if(val < v(p)) Delete(lc(p),val);
else Delete(rc(p),val);
}
f_inline int Pre(const int &val){
int p = rt,ret = -INF;
while(p){
if(v(p) < val) ret = v(p),p = rc(p);
else if(v(p) == val) p = lc(p);
else p = lc(p);
}
return ret;
}
f_inline int Suf(const int &val){
int p = rt,ret = INF;
while(p){
if(v(p) > val) ret = v(p),p = lc(p);
else if(v(p) == val) p = rc(p);
else p = rc(p);
}
return ret;
}
f_inline int QueryRank(const int &val){
int p = rt,ret = 0;
while(p){
if(v(p) == val) return ret+s(lc(p))+1;
else if(val < v(p)) p = lc(p);
else ret += s(lc(p))+cnt(p),p = rc(p);
}
return ret;
}
f_inline int QueryKth(int k){
int p = rt;
while(p){
if(s(lc(p)) < k && s(lc(p))+cnt(p) >= k) return v(p);
if(s(lc(p)) >= k) p = lc(p);
else k -= s(lc(p))+cnt(p),p = rc(p);
}
return 0;
}
int n;
int main(){
cin>>n;
while(n --> 0){
int opt;
cin>>opt;
if(opt == 1){
int x;cin>>x;
Insert(rt,x);
}
if(opt == 2){
int x;cin>>x;
Delete(rt,x);
}
if(opt == 3){
int x;cin>>x;
cout<<QueryRank(x)<<'\n';
}
if(opt == 4){
int k;cin>>k;
cout<<QueryKth(k)<<'\n';
}
if(opt == 5){
int x;cin>>x;
cout<<Pre(x)<<'\n';
}
if(opt == 6){
int x;cin>>x;
cout<<Suf(x)<<'\n';
}
}
return 0;
}