#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; struct node{ int l, r, val, key, size; }tree[maxn]; int t, tot, root; mt19937 rnd(233); inline int read(){ int s = 0, w = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar();} while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar(); return s * w; } inline void print(int x){ if(x < 0) x = ~x + 1, putchar('-'); if(x > 9) print(x / 10); putchar(x % 10 + '0'); } inline int newnode(int val){ tree[++tot].val = val; tree[tot].key = rnd(); tree[tot].size = 1; return tot; } inline void update(int now){ tree[now].size = tree[tree[now].l].size + tree[tree[now].r].size + 1; } void split(int now, int val, int &x, int &y){ if(!now) x = y = 0; else{ if(tree[now].val <= val) x = now, split(tree[now].r, val, tree[now].r, y); else y = now, split(tree[now].l, val, x, tree[now].l); update(now); } } int merge(int x, int y){ if(!x || !y) return x + y; if(tree[x].key > tree[y].key){ tree[x].r = merge(tree[x].r, y); update(x); return x; } else{ tree[y].l = merge(x, tree[y].l); update(y); return y; } } int x,y,z; inline void ins(int val){ split(root, val, x, y); root = merge(merge(x, newnode(val)), y); } inline void del(int val){ split(root, val, x, z); split(x, val - 1, x, y); y = merge(tree[y].l, tree[y].r); root = merge(merge(x, y), z); } inline void getrank(int val){ split(root, val - 1, x, y); print(tree[x].size + 1); putchar('\n'); root = merge(x, y); } inline void getnum(int rank){ int now = root; while(now){ if(tree[tree[now].l].size + 1 == rank) break; else if(tree[tree[now].l].size >= rank) now = tree[now].l; else rank -= tree[tree[now].l].size + 1, now = tree[now].r; } print(tree[now].val); putchar('\n'); } inline void pre(int val){ split(root, val - 1, x, y); int now = x; while(tree[now].r) now = tree[now].r; print(tree[now].val); putchar('\n'); root = merge(x, y); } inline void nxt(int val){ split(root, val, x, y); int now = y; while(tree[now].l) now = tree[now].l; print(tree[now].val); putchar('\n'); root = merge(x, y); } int main(){ t = read(); while(t--){ int op, x; op = read(), x = read(); if(op == 1) ins(x); else if(op == 2) del(x); else if(op == 3) getrank(x); else if(op == 4) getnum(x); else if(op == 5) pre(x); else nxt(x); } return 0; } /* * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ * │Esc│ │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│ ┌┐ ┌┐ ┌┐ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └┘ └┘ └┘ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐ * │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │Num│ / │ * │ - │ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │ │ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter │ │ 4 │ 5 │ 6 │ │ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │ * ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││ * │ Ctrl│ Win│ Alt│ Space │ Alt│ Win│Menu│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │←─┘│ * └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘ */