#include<cstdio>
#include<algorithm>
#include<cstdlib>
#define inf 300000030
#define M 100100
using namespace std;
int l[M],r[M],v[M],size[M],rnd[M],ct[M];
int sz,ss;
void update(int p){
size[p]=size[l[p]]+size[r[p]]+ct[p];
}
void lturn(int &k){
int t=r[k];
r[k]=l[t];
l[t]=k;
size[t]=size[k];
update(k);
k=t;
}
void rturn(int &k){
int t=l[k];
l[k]=r[t];
r[t]=k;
size[t]=size[k];
update(k);
k=t;
}
void ins(int &p,int x){
if(p==0){
p=++sz;
size[p]=ct[p]=1,v[p]=x,rnd[p]=rand();
return;
}
size[p]++;
if(v[p]==x) ct[p]++;
else
if(x>v[p]){
ins(r[p],x);
if(rnd[r[p]]<rnd[p]) lturn(p);
}
else{
ins(l[p],x);
if(rnd[l[p]]<rnd[p]) rturn(p);
}
}
void del(int &p,int x){
if(p==0) return;
if(v[p]==x){
if(ct[p]>1) ct[p]--,size[p]--;
else{
if(l[p]==0||r[p]==0) p=l[p]+r[p];
else
if(rnd[l[p]]<rnd[r[p]]) rturn(p),del(p,x);
else lturn(p),del(p,x);
}
}
else
if(x>v[p]) size[p]--,del(r[p],x);
else size[p]--,del(l[p],x);
}
int query1(int p,int x){
if(p==0) return 0;
if(v[p]==x) return size[l[p]]+1;
if(x>v[p]) return size[l[p]]+ct[p]+query1(r[p],x);
else return query1(l[p],x);
}
int query2(int p,int x){
if(p==0) return 0;
if(x<=size[l[p]]) return query2(l[p],x);
x-=size[l[p]];
if(x<=ct[p]) return v[p];
x-=ct[p];
return query2(r[p],x);
}
int findfront(int p,int x){
if(p==0) return -inf;
if(v[p]<x) return max(v[p],findfront(r[p],x));
else if (v[p]>=x) return findfront(l[p],x);
}
int findback(int p,int x){
if(p==0) return inf;
if(v[p]<=x) return findback(r[p],x);
else return min(v[p],findback(l[p],x));
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
int flag,x;
scanf("%d%d",&flag,&x);
if (flag==1) ins(ss,x);
if (flag==2) del(ss,x);
if (flag==3) printf("%d\n",query1(ss,x));
if (flag==4) printf("%d\n",query2(ss,x));
if (flag==5) printf("%d\n",findfront(ss,x));
if (flag==6) printf("%d\n",findback(ss,x));
}
return 0;
}