#include<bits/stdc++.h>
using namespace std;
struct node{
int sum, l, r, fa, size;
}a[1000010];
int len, n, root;
void init(int x){
if(!x)return;
a[x].size=a[a[x].l].size+a[a[x].r].size+1;
}
void splay(int x, int rt){
while(a[x].fa!=rt&&x){
int fa=a[a[x].fa].fa;
if(a[fa].l==a[x].fa)a[fa].l=x;
else a[fa].r=x;
if(a[a[x].fa].l==x){
a[a[x].fa].l=a[x].r;
a[a[x].r].fa=a[x].fa;
a[x].r=a[x].fa;
}
else{
a[a[x].fa].r=a[x].l;
a[a[x].l].fa=a[x].fa;
a[x].l=a[x].fa;
}
a[a[x].fa].fa=x;
a[x].fa=fa;
init(a[x].l);init(a[x].r);init(x);
}
}
void find(int x){
int pos=root;
while(pos){
if(a[pos].sum>x)pos=a[pos].l;
if(a[pos].sum<x)pos=a[pos].r;
if(a[pos].sum==x)break;
}
splay(pos,0);
root=pos;
}
void push(int x){
int pos=root;
while(pos){
if(a[pos].sum>x){
if(!a[pos].l){
a[pos].l=++len;
a[len].fa=pos;
a[len].sum=x;
a[len].size=1;
break;
}
pos=a[pos].l;
}
else{
if(!a[pos].r){
a[pos].r=++len;
a[len].fa=pos;
a[len].sum=x;
a[len].size=1;
break;
}
pos=a[pos].r;
}
}
if(!pos)root=++len,a[len].sum=x,a[len].size=1;
splay(len,0);
root=len;
}
void del(int x){
find(x);
int cnt=root;
if(a[root].l){
int pos=a[root].l, r=a[root].r;
while(a[pos].r)pos=a[pos].r;
splay(pos,root);
a[a[root].l].r=a[root].r;
a[a[root].r].fa=a[root].l;
root=a[root].l;
a[cnt].l=a[cnt].r=a[cnt].size=a[cnt].sum=0;
init(root);
}
else root=a[root].r,a[cnt].l=a[cnt].r=a[cnt].size=a[cnt].sum=0;
a[root].fa=0;
}
int dfs3(int x){
int pos=root, ans=0;
while(pos){
if(a[pos].sum>=x)pos=a[pos].l;
else ans=pos,pos=a[pos].r;
}
splay(ans,0);
root=ans;
return root;
}
int dfs4(int x){
int pos=root, ans=0;
while(pos){
if(a[pos].sum<=x)pos=a[pos].r;
else ans=pos,pos=a[pos].l;
}
splay(ans,0);
root=ans;
return root;
}
int dfs1(int x){
x=dfs3(x);
return a[a[root].l].size+1;
}
int dfs2(int x){
find(INT_MIN);
int now=a[root].r;
while(now){
if(a[a[now].l].size+1==x)break;
if(a[a[now].l].size>=x)now=a[now].l;
else x-=(a[a[now].l].size+1),now=a[now].r;
}
splay(now,0);
root=now;
return a[root].sum;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
push(INT_MIN);
while(n--){
int op, x;
cin>>op>>x;
if(op==1)push(x);
if(op==2) del(x);
if(op==3)cout<<dfs1(x)<<endl;
if(op==4)cout<<dfs2(x)<<endl;
if(op==5)cout<<a[dfs3(x)].sum<<endl;
if(op==6)cout<<a[dfs4(x)].sum<<endl;
}
return 0;
}