#include <bits/stdc++.h>
using namespace std;
#define MAXN 200001
struct fhq
{
int rd,son,val,l,r;
}t[MAXN];
int tsz,root;
int create(int k)
{
t[++tsz].rd=rand();
t[tsz].son=1;
t[tsz].val=k;
t[tsz].l=t[tsz].r=0;
return tsz;
}
void pushup(int rt)
{
if(rt) t[rt].son=t[t[rt].l].son+t[t[rt].r].son+1;
}
void split_number(int rt,int k,int &x,int &y)
{
if(!rt)
{
x=y=0;
return;
}
if(t[rt].val<=k)
{
x=rt;
split_number(t[rt].r,k,t[rt].r,y);
}
else
{
y=rt;
split_number(t[rt].l,k,x,t[rt].l);
}
pushup(rt);
}
int merge(int x,int y)
{
if(!x || !y) return x+y;
if(t[x].rd>t[y].rd)
{
t[x].r=merge(t[x].r,y);
pushup(x);
return x;
}
else
{
t[y].l=merge(x,t[y].l);
pushup(y);
return y;
}
}
void insert(int k)
{
int x,y;
split_number(root,k,x,y);
root=merge(merge(x,create(k)),y);
}
void Delete(int k)
{
int x,y,z;
split_number(root,k,x,z);
split_number(x,k-1,x,y);
if(y) y=merge(t[y].l,t[y].r);
root=merge(merge(x,y),z);
}
int get_kth(int k,int x)
{
if(!k) return 0;
if(x<=t[t[k].l].son) return get_kth(t[k].l,x);
if(x==t[t[k].l].son+1) return t[k].val;
else return get_kth(t[k].r,x-t[t[k].l].son-1);
}
int get_rank(int k,int x)
{
if(!k) return 0;
if(x<t[k].val) return get_rank(t[k].l,x);
if(x==t[k].val) return t[t[k].l].son;
else return get_rank(t[k].r,x)+t[t[k].l].son+1;
}
int get_pre(int x)
{
return get_kth(root,get_rank(root,x));
}
int get_after(int x)
{
return get_kth(root,get_rank(root,x+1)+1);
}
int main()
{
int n,opt,x;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>opt>>x;
if(opt==1) insert(x);
else if(opt==2) Delete(x);
else if(opt==3) cout<<get_rank(root,x)+1<<endl;
else if(opt==4) cout<<get_kth(root,x)<<endl;
else if(opt==5) cout<<get_pre(x)<<endl;
else if(opt==6) cout<<get_after(x)<<endl;
}
}