#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
int q,swi,x,lst,root;
struct node{
int l,r,val,sum,cnt;
}t[maxn];
void insert(int &p,int a){
if(!p){
p=++lst;
t[p].cnt=t[p].sum=1;
t[p].val=a;
return;
}
if(t[p].val==a){
t[p].cnt++;t[p].sum++;
return;
}
if(t[p].val>a)
insert(t[p].l,a);
else
insert(t[p].r,a);
t[p].sum=t[t[p].l].sum+t[t[p].r].sum+t[p].cnt;
}
int lev(int p,int a){
int tmp=t[t[p].l].sum;
if(t[p].val==a)
return tmp+1;
if(t[p].val>a)
return lev(t[p].l,a);
else
return lev(t[p].r,a)+tmp+t[p].cnt;
}
int lvx(int p,int a){
if(!p)return t[p].val;
int tmp=t[t[p].l].sum;
if(tmp>=a)
return lvx(t[p].l,a);
if(tmp<a&&tmp+t[p].cnt>=a)
return t[p].val;
if(tmp<a)
return lvx(t[p].r,a-tmp-t[p].cnt);
}
int pre(int p,int a,int ans){
if(!p)return ans;
if(t[p].val>=a)
return pre(t[p].l,a,ans);
else
return pre(t[p].r,a,t[p].val);
}
int bac(int p,int a,int ans){
if(!p)return ans;
if(t[p].val<=a)
return bac(t[p].r,a,ans);
else
return bac(t[p].l,a,t[p].val);
}
int main(){
insert(root,-0x7fffffff);
insert(root,0x7fffffff);
scanf("%d",&q);
while(q--){
scanf("%d%d",&swi,&x);
switch(swi){
case 1:{
printf("%d\n",lev(root,x));
break;
}
case 2:{
printf("%d\n",lvx(root,x));
break;
}
case 3:{
printf("%d\n",pre(root,x,-0x3f3f3f3f));
break;
}
case 4:{
printf("%d\n",bac(root,x,0x3f3f3f3f));
break;
}
case 5:{
insert(root,x);
break;
}
}
}
return 0;
}