rt,
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
int n,m,s,l,i,j,askind[1145140],askx[1145140],val[1145140],maxx,top,old_concept[1145140];
map<int,int>new_concept;
struct tree
{
int l,r,sum;
}a[1145140];
void build(int l,int r,int p)
{
a[p].l=l;
a[p].r=r;
if(l==r)
return ;
int mid=(l+r)>>1;
build(l,mid,p<<1);
build(mid+1,r,p<<1|1);
return ;
}
void change(int x,int d,int p)
{
if(a[p].l==a[p].r)
{
a[p].sum+=d;
return ;
}
int mid=(a[p].l+a[p].r)>>1;
if(x<=mid)
change(x,d,p<<1);
else
change(x,d,p<<1|1);
a[p].sum+=d;
return ;
}
int ask_sum(int l,int r,int p)
{
if(l>r)
return 0;
if(l<=a[p].l&&a[p].r<=r)
return a[p].sum;
int mid=(a[p].l+a[p].r)>>1,sum=0;
if(l<=mid)
sum+=ask_sum(l,r,p<<1);
if(mid<r)
sum+=ask_sum(l,r,p<<1|1);
return sum;
}
int ask_x_pm(int x)
{
if(x>maxx)
return maxx+1;
return 1+ask_sum(1,x-1,1);
}
int ask_pm_x(int x,int p)
{
if(a[p].l==a[p].r)
return a[p].l;
if(a[p<<1].sum>=x)
return ask_pm_x(x,p<<1);
return ask_pm_x(x-a[p<<1].sum,p<<1|1);
}
int ask_front(int x)
{
// cout<<"QAQ "<<ask_x_pm(x)<<endl;
return ask_pm_x(ask_x_pm(x)-1,1);
}
int ask_back(int x)
{
// cout<<"QAQ "<<ask_x_pm(x)<<endl;
return ask_pm_x(ask_x_pm(x)+1,1);
}
int main()
{
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&askind[i],&askx[i]);
val[i]=askx[i];
}
sort(val+1,val+1+m);
for(i=1;i<=m;i++)
{
if(new_concept[val[i]]==0)
{
maxx++;
new_concept[val[i]]=maxx;
old_concept[maxx]=val[i];
}
}
/* for(i=1;i<=m;i++)
{
cout<<askind[i]<<" "<<new_concept[askx[i]]<<endl;
}*/
build(1,maxx,1);
for(i=1;i<=m;i++)
{
if(askind[i]==1)
change(new_concept[askx[i]],1,1);
if(askind[i]==2)
change(new_concept[askx[i]],-1,1);
if(askind[i]==3)
printf("%d\n",old_concept[ask_x_pm(new_concept[askx[i]])]);
if(askind[i]==4)
printf("%d\n",old_concept[ask_pm_x(askx[i],1)]);
if(askind[i]==5)
printf("%d\n",old_concept[ask_front(new_concept[askx[i]])]);
if(askind[i]==6)
printf("%d\n",old_concept[ask_front(new_concept[askx[i]])]);
}
/* for(i=1;i<=maxx;i++)
{
printf("%d %d\n",old_concept[i],ask_sum(i,i,1));
}*/
}