#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;
struct SplayNode{
int chd[3],fa;
int cnt;
int val;
int size;
}Tree[N];
int n;
int root=0,tot=0;
int opt,x;
void Push_up(int u)
{
Tree[u].size=Tree[Tree[u].chd[0]].size+Tree[Tree[u].chd[1]].size+Tree[u].cnt;
}
void rotate(int u)
{
register int fa=Tree[u].fa;
register int gdfa=Tree[fa].fa;
register int k1=(Tree[fa].chd[1]==u),k2=(Tree[gdfa].chd[1]==fa);
Tree[gdfa].chd[k2]=u;
Tree[u].fa=gdfa;
Tree[fa].chd[k1]=Tree[u].chd[k1^1];
Tree[Tree[u].chd[k1^1]].fa=fa;
Tree[u].chd[k1^1]=fa;
Tree[fa].fa=u;
Push_up(fa);
Push_up(u);
}
void Splay(int u,int goal)
{
while(Tree[u].fa!=goal)
{
int fa=Tree[u].fa;
int gdfa=Tree[fa].fa;
if(gdfa!=goal)
(Tree[fa].chd[0]==x)^(Tree[gdfa].chd[0]==fa)?rotate(u):rotate(fa);
rotate(u);
}
if(goal==0) root=u;
}
void Insert(int x)
{
int u=root,fa=0;
while(u&&Tree[u].val!=x)
{
fa=u;
u=Tree[u].chd[x>Tree[u].val];
}
if(u) Tree[u].cnt++;
else{
u=++tot;
if(fa) Tree[u].chd[x>Tree[u].val]=u;
Tree[u].chd[0]=0;
Tree[u].chd[1]=0;
Tree[u].val=x;
Tree[u].cnt=1;
Tree[u].size=1;
Tree[u].fa=fa;
}
Splay(u,0);
}
void Find(int x)
{
int u=root;
if(!u) return ;
while(Tree[u].chd[x>Tree[u].val]&&x!=Tree[u].val)
u=Tree[u].chd[x>Tree[u].val];
Splay(u,0);
}
int Next(int x,int f)
{
Find(x);
int u=root;
if((Tree[u].val>x&&f)||(Tree[u].val<x&&!f)) return u;
u=Tree[u].chd[f];
while(Tree[u].chd[f^1]) u=Tree[u].chd[f^1];
return u;
}
void Delete(int x)
{
int lt=Next(x,0);
int nt=Next(x,1);
Splay(lt,0);
Splay(nt,lt);
int del=Tree[nt].chd[0];
if(Tree[del].cnt>1)
{
Tree[del].cnt--;
Splay(del,0);
}else Tree[nt].chd[0]=0;
}
int K_th(int x)
{
int u=root;
if(Tree[u].size<x) return false;
while(1)
{
int lch=Tree[u].chd[0];
if(x>Tree[lch].size+Tree[u].cnt)
{
x-=Tree[lch].size+Tree[u].cnt;
u=Tree[u].chd[1];
}else if(Tree[lch].size>=x) u=lch;
else return Tree[u].val;
}
}
int main()
{
Insert(-2147483647);
Insert(+2147483647);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&opt,&x);
switch(opt)
{
case 1:{
Insert(x);
break;
}
case 2:{
Delete(x);
break;
}
case 3:{
Find(x);
printf("%d\n",Tree[Tree[root].chd[0]].size);
break;
}
case 4:{
printf("%d\n",K_th(x));
break;
}
case 5:{
printf("%d\n",Tree[Next(x,0)].val);
break;
}
case 6:{
printf("%d\n",Tree[Next(x,1)].val);
break;
}
}
}
return 0;
}