#include<bits/stdc++.h>
#define int long long
#define il inline
using namespace std;
const int N = 100005;
struct Treap{
int tot, root, INF = 0x3f3f3f3f;
struct node{
int l, r, ln, rn, sn;
int fa, v, det, cnt;
}t[N];
il int create(int x){
t[++tot].v = x;
t[tot].sn = 1;
t[tot].cnt = 1;
t[tot].det = rand() * rand() % 10000000;
return tot;
}
il void up(int x){
t[x].sn = t[t[x].l].sn + t[t[x].r].sn + t[x].cnt;
}
il void zig(int &p){
int q = t[p].l;
t[p].l = t[q].r;
t[q].r = p;
p = q;
up(t[p].r);
up(p);
}
il void zag(int &p){
int q = t[p].r;
t[p].r = t[q].l;
t[q].l = p;
p = q;
up(t[p].l);
up(p);
}
il void ins(int &p, int v){
if (!p){
p = create(v);
return ;
}
if (v < t[p].v){
ins(t[p].l, v);
if (t[p].det < t[t[p].l].det) zig(p);
}
else{
ins(t[p].r, v);
if (t[p].det < t[t[p].r].det) zag(p);
}
up(p);
}
il void del(int &p, int v){
if (!p) return ;
if (v == t[p].v){
if (t[p].cnt > 1){
t[p].cnt--;
up(p);
return ;
}
if (!t[p].l && !t[p].r){
p = 0;
return ;
}
if (!t[p].r || t[t[p].l].det > t[t[p].r].det){
zig(p);
del(t[p].r, v);
}
else{
zag(p);
del(t[p].l, v);
}
up(p);
}
if (v < t[p].v) del(t[p].l, v);
else del(t[p].r, v);
}
il int get_rank(int p, int v){
if (!p) return 0;
if (v == t[p].v) return t[t[p].l].sn + 1;
if (v < t[p].v) return get_rank(t[p].l, v);
return get_rank(t[p].r, v) + t[t[p].l].sn + t[p].cnt;
}
il int get_val(int p, int k){
if (!p) return -1;
if (t[t[p].l].sn >= k) return get_val(t[p].l, k);
if (t[t[p].l].sn + t[p].cnt >= k) return t[p].v;
return get_val(t[p].r, k - t[t[p].l].sn - t[p].cnt);
}
il int pre(int p, int v){
if (!p) return 0;
if (t[p].v >= v) return pre(t[p].l, v);
int tmp = pre(t[p].r, v);
if (!tmp) return t[p].v;
return tmp;
}
il int nxt(int p, int v){
if (!p) return 0;
if (t[p].v <= v) return nxt(t[p].r, v);
int tmp = nxt(t[p].l, v);
if (!tmp) return t[p].v;
return tmp;
}
}trp;
signed main(){
srand(time(0));
int n, opt, x;
cin >> n;
for (int i = 1; i <= n; i++){
cin >> opt >> x;
if (opt == 1) trp.ins(trp.root, x);
else if (opt == 2) trp.del(trp.root, x);
else if (opt == 3){
trp.ins(trp.root, x);
cout << trp.get_rank(trp.root, x) << "\n";
trp.del(trp.root, x);
}
else if (opt == 4) cout << trp.get_val(trp.root, x) << "\n";
else if (opt == 5){
trp.ins(trp.root, x);
cout << trp.pre(trp.root, x) << "\n";
trp.del(trp.root, x);
}
else if (opt == 6){
trp.ins(trp.root, x);
cout << trp.nxt(trp.root, x) << "\n";
trp.del(trp.root, x);
}
}
return 0;
}