
#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e6+5, INF = 1e9;int n, tot, rt;int tr[N][2];int val[N], dat[N];int size[N], cnt[N];int New(int v) { val[++tot] = v; dat[tot] = rand(); size[tot] = 1; cnt[tot] = 1; return tot;}void pushup(int u) { size[u] = size[tr[u][0]]+size[tr[u][1]]+cnt[u];}void build() { rt = New(-INF); tr[rt][1] = New(INF); pushup(rt);}void rotate(int &u, int d) { int t = tr[u][d^1]; tr[u][d^1] = tr[t][d]; tr[t][d] = u; u = t; pushup(tr[u][d]); pushup(u);} void insert(int &u, int v) { if (!u) { u = New(v); return ; } if (v == val[u]) { cnt[u]++; } else { int d = v<val[u]?0:1; insert(tr[u][d], v); if (dat[u] < dat[tr[u][d]]) rotate(u, d^1); } pushup(u);} void remove(int &u, int v) { if (!u) return ; if (v == val[u]) { if (cnt[u] > 1) { cnt[u]--; pushup(u); return ; } if (tr[u][0] || tr[u][1]) { if (!tr[u][1] || dat[tr[u][0]]>dat[tr[u][1]]) { rotate(u, 1); remove(tr[u][1], v); } else { rotate(u, 0); remove(tr[u][0], v); } pushup(u); } else { u = 0; } return ; } if (v < val[u]) { remove(tr[u][0], v); } else { remove(tr[u][1], v); } pushup(u);}int get_rank(int u, int v) { if (!u) return -2; if (v == val[u]) { return size[tr[u][0]]+1; } else if (v < val[u]) { return get_rank(tr[u][0], v); } else { return size[tr[u][0]]+cnt[u]+get_rank(tr[u][1], v); }}int get_val(int u, int rank) { if (!u) return INF; if (rank <= size[tr[u][0]]) { return get_val(tr[u][0], rank); } else if (rank <= size[tr[u][0]]+cnt[u]) { return val[u]; } else { return get_val(tr[u][1], rank-size[tr[u][0]]-cnt[u]); }}int get_pre(int v) { int u = rt, pre; while (u) { if (val[u] < v) { pre = val[u]; u = tr[u][1]; } else { u = tr[u][0]; } } return pre;}int get_next(int v) { int u = rt, next; while (u) { if (val[u] > v) { next = val[u]; u = tr[u][0]; } else { u = tr[u][1]; } } return next;}signed main() { build(); cin >> n; for (int i = 1; i <= n; i++) { int op, x; scanf("%lld%lld", &op, &x); if (op == 1) { insert(rt, x); } else if (op == 2) { remove(rt, x); } else if (op == 3) { cout << get_rank(rt, x)-1 << "\n"; } else if (op == 4) { cout << get_val(rt, x+1) << "\n"; } else if (op == 5) { cout << get_pre(x) << "\n"; } else if (op == 6) { cout << get_next(x) << "\n"; } } return 0;}