#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cassert>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#include<cstdlib>
using namespace std;
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
int read()
{
int now=0,nev=1;
char c=getchar();
while(c<'0' || c>'9')
{
if(c=='-')
nev=-1;
c=getchar();
}
while(c>='0' && c<='9')
{
now=(now<<1)+(now<<3)+(c&15);
c=getchar();
}
return now*nev;
}
const int MAXN=1e5+10;
int n;
int root,tt;
struct node
{
int l,r;
int p;
int w;
int size;
int c;
}tr[MAXN];
#define ls(x) tr[x].l
#define rs(x) tr[x].r
#define p(x) tr[x].p
#define v(x) tr[x].w
#define s(x) tr[x].size
#define c(x) tr[x].c
void rotate_left(int &k)
{
int y=rs(k);
rs(k)=ls(y);
ls(y)=k;
s(y)=s(k);
s(k)=c(k)+s(ls(k))+s(rs(k));
k=y;
}
void rotate_right(int &k)
{
int y=ls(k);
ls(k)=rs(y);
rs(y)=k;
s(y)=s(k);
s(k)=c(k)+s(ls(k))+s(rs(k));
k=y;
}
void insert_x(int &k,int x)
{
if(!k)
{
k=++tt;
v(k)=x;
p(k)=rand();
c(k)=1;
s(k)=1;
ls(k)=0;
rs(k)=0;
return ;
}
s(k)++;
if(v(k)==x)
c(k)++;
if(x<v(k))
{
insert_x(ls(k),x);
if(p(ls(k))<p(k))
rotate_right(k);
}
else
{
insert_x(rs(k),x);
if(p(rs(k))<p(k))
rotate_left(k);
}
}
void delete_x(int &k,int x)
{
if(v(k)==x)
{
if(c(k)>1)
{
c(k)--;
s(k)--;
}
else if(!ls(k) || !rs(k))
k=ls(k)+rs(k);
else if(p(ls(k))<p(rs(k)))
{
rotate_right(k);
delete_x(k,x);
}
else
{
rotate_left(k);
delete_x(k,x);
}
return ;
}
s(k)--;
if(x<v(k))
delete_x(ls(k),x);
else
delete_x(rs(k),x);
}
int get_rank(int x)
{
int k=root;
int rank=0;
while(k)
{
if(x==v(k))
return rank+s(ls(k))+1;
if(x<v(k))
k=ls(k);
else
{
rank+=s(ls(k))+c(k);
k=rs(k);
}
}
return rank;
}
int get_kthmath(int x)
{
int k=root;
while(k)
{
if(x>s(ls(k)) && x<=s(ls(k))+c(k))
return v(k);
if(x<=s(ls(k)))
k=ls(k);
else
{
x-=s(ls(k))+c(k);
k=rs(k);
}
}
}
int get_pre(int x)
{
int k=root;
int pre=-INF;
while(k)
{
if(x>v(k))
{
pre=v(k);
k=rs(k);
}
else
k=ls(k);
}
return pre;
}
int get_nxt(int x)
{
int k=root;
int nxt=INF;
while(k)
{
if(x<v(k))
{
nxt=v(k);
k=ls(k);
}
else
k=rs(k);
}
return nxt;
}
int main()
{
memset(tr,0,sizeof(tr));
n=read();
root=tt=0;
while(n--)
{
int op,x;
op=read(),x=read();
if(op==1)
insert_x(root,x);
else if(op==2)
delete_x(root,x);
else if(op==3)
printf("%d\n",get_rank(x));
else if(op==4)
printf("%d\n",get_kthmath(x));
else if(op==5)
printf("%d\n",get_pre(x));
else if(op==6)
printf("%d\n",get_nxt(x));
}
return 0;
}