#include<bits/stdc++.h>
using namespace std;
int n,op,x,cnt;
struct le{
int l,r,v,size;
}a[100100];
int find(int x,int id){
if(a[id].v==x)return id;
if(a[id].v>x){
if(a[id].l==0)return id;
return find(x,a[id].l);
}else{
if(a[id].r==0)return id;
return find(x,a[id].r);
}
}
int g1(int x,int id){
if(a[id].v==0)return 0;
if(a[id].v==x)return 1;
if(x>a[id].v){
return g1(x,a[id].r)+a[a[id].l].size+1;
}else{
return g1(x,a[id].l);
}
}
int g2(int y,int id){
if(y+a[a[id].l].size+1==x)return a[id].v;
if(y+a[a[id].l].size+1<x){
return g2(y+a[a[id].l].size+1,a[id].r);
}else return g2(y,a[id].l);
}
int g3(int x,int id,int ans){
if(a[id].v>=x){
if(a[id].l==0)return ans;
else return g3(x,a[id].l,ans);
}else{
if(a[id].r==0)return (a[id].v<x)?a[id].v:ans;
return g3(x,a[id].r,a[id].v);
}
}
int g4(int x,int id,int ans){
if(a[id].v<=x){
if(a[id].r==0)return ans;
else return g4(x,a[id].r,ans);
}else{
if(a[id].l==0)return (a[id].v>x)?a[id].v:ans;
return g4(x,a[id].l,a[id].v);
}
}
void put(int x,int id){
if(a[id].v==x)return;
a[id].size++;
if(a[id].v>x){
if(a[id].l==0){
a[id].l=cnt;
return;
}
put(x,a[id].l);
}else{
if(a[id].r==0){
a[id].r=cnt;
return;
}
put(x,a[id].r);
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>op>>x;
if(op==1){
cout<<g1(x,1)<<endl;
}else if(op==2){
cout<<g2(0,1)<<endl;
}else if(op==3){
cout<<g3(x,1,-2147483647)<<endl;
}else if(op==4){
cout<<g4(x,1,2147483647)<<endl;
}else{
a[++cnt].v=x;
a[cnt].size=1;
put(x,1);
}
}
return 0;
}