#include <iostream>
#include <climits>
#define MAX_ARR_NUM 1145141
using namespace std;
class tree_node{
public:
int val;
int l;
int r;
int sonnum;
int nodenum;
tree_node(int _l=0, int _r=0, int _sonnum=0){
this->l = _l;
this->r = _r;
this->sonnum = _sonnum;
}
};
tree_node trees[MAX_ARR_NUM];
int cnt = 0;
void add(int x, int v){
trees[x].sonnum++;
if(v == trees[x].val) {trees[x].nodenum++; return;}
if(v < trees[x].val) {
if(trees[x].l)
add(trees[x].l, v);
else{
++cnt;
trees[cnt].val = v;
trees[cnt].nodenum = 1;
trees[x].l = cnt;
}
}
else{
if(trees[x].r)
add(trees[x].r, v);
else{
++cnt;
trees[cnt].val = v;
trees[cnt].nodenum = 1;
trees[x].r = cnt;
}
}
}
int find_fr(int x, int v, int ans){
if(trees[x].val>=v){
if(trees[x].l)
return find_fr(trees[x].l, v, ans);
else
return ans;
}
else{
if(!trees[x].r)
return trees[x].val;
else
return find_fr(trees[x].r, v, trees[x].val);
}
}
int find_ne(int x, int v, int ans){
if(trees[x].val<=v){
if(trees[x].r)
return find_ne(trees[x].r, v, ans);
else
return ans;
}
else{
if(!trees[x].l)
return trees[x].val;
else
return find_ne(trees[x].l, v, trees[x].val);
}
}
int find_lev(int x, int val){
if(x==0) return 0;
if(trees[x].val==val) return trees[trees[x].l].sonnum + trees[trees[x].l].nodenum;
else if(trees[x].val>val) return find_lev(trees[x].l, val);
else return find_lev(trees[x].r, val) + trees[trees[x].l].nodenum + trees[trees[x].l].sonnum + trees[x].nodenum;
}
int find_val(int x, int lev){
if(x==0) return INT_MAX;
if(trees[x].l>=lev) return find_val(trees[x].l, lev);
else if(trees[trees[x].l].nodenum + trees[trees[x].l].sonnum + trees[x].nodenum >= lev) return trees[x].val;
else return find_val(trees[x].r, lev-trees[trees[x].l].nodenum-trees[trees[x].l].sonnum-trees[x].nodenum);
}
int main(){
int n;
cin >> n;
for(int i=1; i<=n; i++){
int ctrl;
int num;
cin >> ctrl >> num;
switch(ctrl){
case 1: {cout << find_lev(1, num)+1 << endl; break;}
case 2: {cout << find_val(1, num) << endl; break;}
case 3: {cout << find_fr(1, num, -INT_MAX) << endl; break;}
case 4: {cout << find_ne(1, num, INT_MAX) << endl; break;}
case 5: {
if(!cnt){
++cnt;
trees[cnt].val = num;
trees[cnt].nodenum = 1;
}
else add(1, num);
break;
}
}
}
}