#include<bits/stdc++.h>
using namespace std;
#define int long long
struct tree{
int l=0,r=0,v=0,size=0,t=0;
}a[100200];
int cont;
int fi(int x,int root){
if(root==0) return 1;
else if (x==a[root].v) return a[a[root].l].size+1+a[a[root].l].t;
else if(x<a[root].v) return fi(x,a[root].l);
else if(x>a[root].v) return fi(x,a[root].r)+a[a[root].l].size+a[root].t;
}
void do1(int x){
cout<<fi(x,1)<<endl;
}
int f2(int x,int root){
if(x<=a[a[root].l].size+a[a[root].l].t){
f2(x,a[root].l);
}
else if(x>a[a[root].l].size + a[a[root].l].t+1){
f2(x-a[a[root].l].size-a[root].t,a[root].r);
}
else if(x==a[a[root].l].size + a[a[root].l].t+1){
return a[root].v;
}
}
void do2(int x){
cout<<f2(x,1)<<endl;
}
void do3(int x,int p){
int ct00,ct11,i=1;//先查x的排名,在找比x排名小的第一个数 ,ct00为原数的排名,ct11为原数排名-1,2,3...得到的新数
if(p==-1){
ct00=fi(x,1);
cout<<ct00;
do{
if(ct00==1){
ct11= -2147483647;
break;
}
ct11=f2(ct00-i,1);
i++;
}while(x==ct11);
cout<<ct11<<endl;
}
if(p==1){
ct00=fi(x,1);
do{
if(ct00==a[1].size+a[1].t){
ct11= 2147483647;
break;
}
ct11=f2(ct00+i,1);
i++;
}while(x==ct11);
cout<<ct11<<endl;
}
}
void do5(int x,int root){
if(x<a[root].v){
if(!a[root].l){ cont++;
a[root].l=cont; a[root].size++;
a[cont].v=x; a[cont].l=0; a[cont].r=0; a[cont].t=1; a[cont].size=0; }
else {
a[root].size++;
do5(x,a[root].l);
}}
else if(x>a[root].v){
if(!a[root].r){ cont++;
a[root].r=cont; a[root].size++;
a[cont].v=x; a[cont].l=0; a[cont].r=0; a[cont].t=1; a[cont].size=0; }
else {
a[root].size++;
do5(x,a[root].r);
}}
else {
cont++;
a[root].t++;
}
}
signed main(){
int q,op,x;
cin>>q;
for(int i=0;i<q;i++){
cin>>op>>x;
if(op==1) do1(x);
else if(op==2) do2(x);
else if(op==3) do3(x,-1);
else if(op==4) do3(x,1);
else if(cont ==0){cont++;
a[cont].v=x;a[cont].t++;a[cont].size++;}
else do5(x,1);
}
return 0;
}