用了文艺平衡树的板子
#include<bits/stdc++.h>
#define int long long
#define inf 1e9
using namespace std;
const int N=100010+10;
struct node{
int s[2], v, p; int size, flag;
void init(int _v, int _p) {v = _v;p = _p;size=1;}
}tree[N];
int root, idx;
int ws(int index) {
return tree[tree[index].p].s[1] == index;
}
void setson(int son, int father, int which) {
if(father)tree[father].s[which] = son;
if(son)tree[son].p = father;
}
void push_up(int index) {
tree[index].size = tree[tree[index].s[0]].size + tree[tree[index].s[1]].size;
}
void rotate(int index) {
int f = tree[index].p, ff = tree[f].p, w = ws(index), wf = ws(f), p = tree[index].s[!w];
setson(p, f, w); setson(index, ff, wf); setson(f, index, !w);
push_up(f);push_up(index);
}
void splay(int index, int x = 0) {
while(tree[index].p != x) {
int f = tree[index].p, ff = tree[f].p;
if(ff != x) {
if(ws(index) != ws(f)) {rotate(index);}
else; rotate(f);
}
rotate(index);
}
if(!x) root = index;
}
void insert(int v) {
int u = root, p = 0;
while(u) {
p = u;
u = tree[u].s[v>tree[u].v];
}
u = ++ idx;
if(p) tree[p].s[v>tree[u].v] = u;
tree[u].init(v, p); splay(u);
}
void del(int v) {
int u = root, p = 0, ans;
while(u) {
p = u;
if(tree[u].v < v) {
u = tree[u].s[0];
} else {
u = tree[u].s[1];
}
}
int pp = tree[p].p;
if(tree[p].v == v) {
tree[pp].s[ws(p)] = 0;
}
}
int que1(int v) {
int ans = 1,u = root, p = 0;
while(u) {
p = u;
if(v > tree[u].v) ans = ans+1+tree[tree[u].s[0]].size;
u = tree[u].s[v>tree[u].v];
}
int pp = tree[p].p;
tree[pp].s[ws(p)] = 0;
splay(pp);
return ans;
}
int que2(int v) {
int ans, u = root, p = 0;
while(u) {
p = u;
if(tree[u].size>=v) {
u = tree[u].s[0];
} else if(tree[u].size+1==v) {
int ans = tree[u].v;
return ans;
} else {
v = v - tree[u].size - 1;
u = tree[u].s[1];
}
}
}
int que3(int v) {
int u = root, p = 0, ans = -1;
while(u) {
p = u;
if(tree[u].v < v) {
ans = tree[u].v;
u = tree[u].s[1];
} else {
u = tree[u].s[0];
}
}
return ans;
}
int que4(int v) {
int u = root, p = 0, ans = -1;
while(u) {
p = u;
if(tree[u].v > v) {
ans = tree[u].v;
u = tree[u].s[0];
} else {
u = tree[u].s[1];
}
}
return ans;
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
int t; cin >> t;
insert(-inf); insert(inf);
while(t--) {
int opt, x; cin >> opt >> x;
if(opt == 1) insert(x);
else if(opt == 2) del(x);
else if(opt == 3) cout << que1(x)-1 << endl;
else if(opt == 4) cout << que2(x) << endl;
else if(opt == 5) cout << que3(x) << endl;
else if(opt == 6) cout << que4(x) << endl;
}
return 0;
}