RT
#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 1e5 + 5;
struct T {
int x, y, l, r, c, s;
T() {
x = y = l = r = c = s = 0;
}
} w[kMaxN];
int n, tot, rt, op, x;
void Push_up(int u) {
u && (w[u].s = w[w[u].l].s + w[w[u].r].s + 1);
}
int Init(int x) {
++tot;
w[tot].x = x, w[tot].y = rand(), w[tot].l = w[tot].r = 0, w[tot].c = w[tot].s = 1;
return tot;
}
void Split(int u, int v, int &x, int &y) { // 分裂
if (u) {
if (w[u].x <= v) {
int r = w[x = u].r;
Split(r, v, w[u].r = 0, y);
} else {
int l = w[y = u].l;
Split(l, v, x, w[u].l = 0);
}
Push_up(u);
} else {
x = y = 0;
}
}
int Merge(int u, int v) {
if (!u || !v) {
return u + v;
} else {
if (w[u].y >= w[v].y) {
w[u].r = Merge(w[u].r, v);
Push_up(u);
return u;
} else {
w[v].l = Merge(u, w[v].l);
Push_up(v);
return v;
}
}
}
void Insert(int x) {
int l = 0, r = 0;
Split(rt, x, l, r);
rt = Merge(Merge(l, Init(x)), r);
}
void Del(int &u, int x) {
if (u) {
if (w[u].x == x) {
u = Merge(w[u].l, w[u].r);
} else {
if (w[u].x > x) {
Del(w[u].l, x);
} else {
Del(w[u].r, x);
}
Push_up(u);
}
}
}
int Query_num(int u, int x) {
if (!u) {
return 0;
} else if (x <= w[w[u].l].s) {
return Query_num(w[u].l, x);
} else if (w[w[u].l].s < x && x <= w[w[u].l].s + w[u].c) {
return w[u].x;
} else {
return Query_num(w[u].r, x - w[w[u].l].s - w[u].c);
}
}
int Query_Pl(int u, int x) {
if (!u) {
return 0;
} else if (x == w[u].x && w[u].c) {
return w[w[u].l].s;
} else if (w[u].x < x) {
return w[w[u].l].s + w[u].c + Query_Pl(w[u].r, x);
} else {
return Query_Pl(w[u].l, x);
}
}
int Query_Pr(int u, int x) {
if (!u) {
return 1;
} else if (x == w[u].x && w[u].c) {
return w[w[u].l].s + w[u].c + 1;
} else if (x < w[u].x) {
return Query_Pr(w[u].l, x);
} else {
return w[w[u].l].s + w[u].c + Query_Pr(w[u].r, x);
}
}
int Pre(int x) {
return Query_num(rt, Query_Pl(rt, x));
}
int Back(int x) {
return Query_num(rt, Query_Pr(rt, x));
}
int main() {
srand(time(0));
for (cin >> n; n; n--) {
cin >> op >> x;
if (op == 1) {
Insert(x);
} else if (op == 2) {
Del(rt, x);
} else if (op == 3) {
cout << Query_Pl(rt, x) + 1 << "\n";
} else if (op == 4) {
cout << Query_num(rt, x) << "\n";
} else if (op == 5) {
cout << Pre(x) << "\n";
} else {
cout << Back(x) << "\n";
}
}
return 0;
}