#include<iostream>
#include<cstdio>
using namespace std;
int n,sum;
struct node{
int l,r,val,size,cnt;
}a[10005];
int rank(int x,int root)
{
if(root==0) return 1;
if(x<a[root].val)
{
return rank(x,a[root].l);
}
else if(x>a[root].val)
{
return a[root].cnt+a[a[root].l].size+rank(x,a[root].r);
}
else
{
return a[a[root].l].size+1;
}
}
int rankx(int x,int root)
{
if(x<1)
return -2147483647;
if(x>a[1].size)
return 2147483647;
if(x<=a[a[root].l].size)
{
return rankx(x,a[root].l);
}
else if(x<=a[a[root].l].size+a[root].cnt)
{
return a[root].val;
}
else
{
return rankx(x-a[a[root].l].size-a[root].cnt,a[root].r);
}
}
void insert(int x,int root)
{
if(x<a[root].val)
{
if(a[root].l==0)
{
a[root].l=++sum;
a[sum].val=x;
a[sum].r=0;
a[sum].size=1;
a[sum].cnt=1;
}
else
{
insert(x,a[root].l);
}
}
else if(x>a[root].val)
{
if(a[root].r==0)
{
a[root].r=++sum;
a[sum].val=x;
a[sum].l=0;
a[sum].r=0;
a[sum].size=1;
a[sum].cnt=1;
}
else
{
insert(x,a[root].r);
}
}
else
{
a[root].cnt++;
}
a[root].size++;
}
int main()
{
int opt,x;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&opt,&x);
switch(opt)
{
case 1:
printf("%d\n",rank(x,1));break;
case 2:
printf("%d\n",rankx(x,1));break;
case 3:
printf("%d\n",rankx(rank(x,1)-1,1));break;
case 4:
printf("%d\n",rankx(rank(x,1)+1,1));break;
case 5:
if(sum==0)
{
sum++;
a[sum].l=0;
a[sum].r=0;
a[sum].val=x;
a[sum].cnt=1;
a[sum].size=1;
}
else
insert(x,1);
}
}
return 0;
}