RT
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
using namespace std;
const int maxn=1e5+5;
int T,root;
struct FHQ
{
int val,pri;
int ls,rs;
int siz;
bool laz;
}fhq[maxn];
int tot;
int newnode(int val)
{
fhq[++tot].val=val;
fhq[tot].pri=rand();
fhq[tot].ls=fhq[tot].rs=0;
fhq[tot].siz=1;
fhq[tot].laz=false;
return tot;
}
void pushup(int rt)
{
fhq[rt].siz=fhq[fhq[rt].ls].siz+fhq[fhq[rt].rs].siz+1;
}
void pushdown(int rt)
{
if(!fhq[rt].laz) return;
swap(fhq[rt].ls,fhq[rt].rs);
fhq[fhq[rt].ls].laz^=1;
fhq[fhq[rt].rs].laz^=1;
fhq[rt].laz=0;
}
void Split(int rt,int val,int &x,int &y)
{
if(!rt)
{
x=y=0;
return;
}
pushdown(rt);
if(fhq[rt].val<=val) {x=rt;Split(fhq[rt].rs,val,fhq[rt].rs,y);}
else {y=rt;Split(fhq[rt].ls,val,x,fhq[rt].ls);}
pushup(rt);
}
int Merge(int x,int y)
{
if(!x||!y) return x+y;
if(fhq[x].pri>fhq[y].pri)
{
pushdown(x);
fhq[x].rs=Merge(fhq[x].rs,y);
pushup(x);
return x;
}
else
{
pushdown(y);
fhq[y].ls=Merge(x,fhq[y].ls);
pushup(y);
return y;
}
}
void Insert(int val)
{
int x,y;
Split(root,val,x,y);
root=Merge(Merge(x,newnode(val)),y);
}
void Delet(int val)
{
int x,y,z;
Split(root,val,x,z);
Split(root,val-1,x,y);
y=Merge(fhq[y].ls,fhq[y].rs);
root=Merge(Merge(x,y),z);
}
int qRank(int val)
{
int x,y;
Split(root,val-1,x,y);
int res=fhq[x].siz+1;
root=Merge(x,y);
return res;
}
int qNum(int rk)
{
int p=root;
while(p)
{
if(fhq[fhq[p].ls].siz+1==rk) break;
if(fhq[fhq[p].ls].siz>=rk) p=fhq[p].ls;
else {rk-=fhq[fhq[p].ls].siz+1;p=fhq[p].rs;}
}
return fhq[p].val;
}
int qPre(int val)
{
int x,y;
Split(root,val-1,x,y);
int p=x;
while(fhq[p].rs) p=fhq[p].rs;
int res=fhq[p].val;
root=Merge(x,y);
return res;
}
int qSuf(int val)
{
int x,y;
Split(root,val,x,y);
int p=y;
while(fhq[p].ls) p=fhq[p].ls;
int res=fhq[p].val;
root=Merge(x,y);
return res;
}
int main()
{
int opt,x;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&opt,&x);
switch(opt)
{
case 1:
Insert(x);
break;
case 2:
Delet(x);
break;
case 3:
printf("%d\n",qRank(x));
break;
case 4:
printf("%d\n",qNum(x));
break;
case 5:
printf("%d\n",qPre(x));
break;
case 6:
printf("%d\n",qSuf(x));
break;
}
}
return 0;
}