How to 优化
#include<bits/stdc++.h>
#define pp puts("A")
using namespace std;
const int N = 1e5 + 10;
struct node{
node *l,*r,*fa;
int sz,val;
}t[N],*root = t + 1;
node *vis[N],**top = vis;
void New(node *u){
u->sz = 1;u->val = 0;
u->l = u->r = u->fa = t;
}
bool ls(node *u){
return u->fa->l==u;
}
void pushup(node *u){
u->sz = 1 + u->l->sz + u->r->sz;
}
int Rank(int k,node *u = root){
int ans = 0;
while(u != t){
if(k <= u->val) u = u->l;
else ans += u->l->sz+1,u = u->r;
}
return ans;
}
node* find(int k,node *u = root){
while(k != u->l->sz + 1){
if(k < u->l->sz + 1) u = u->l;
else k -= u->l->sz+1,u = u->r;
}
return u;
}
void rtt(node *u){
node *f = u->fa,*g = f->fa;
if(ls(u)){//如果是左儿子
f->l = u->r;
if(f->l != t) f->l->fa=f;
u->r=f;
}else{
f->r = u->l;
if(f->r != t) f->r->fa=f;
u->l=f;
}
f->fa=u;
if(g != t){//如果f不是根
if(g->l==f) g->l=u;
else g->r = u;
}
u->fa=g;
pushup(f),pushup(u);
}
void splay(node *u,node *v){
node *f = u->fa,*g = f->fa;
if(v == t) root = u;
while(u->fa != v){
f = u->fa,g = f->fa;
if(g != v){
if(ls(u) == ls(f)) rtt(f);
else rtt(u);
}
rtt(u);
}
}
void insert(int x){
int pos = Rank(x);
node *l = find(pos),*r = find(pos + 1);node *u= *top;top--;
splay(l,t),splay(r,l);
New(u);u->val = x,u->fa = r,r->l=u;
pushup(r),pushup(l);
}
void erase(int x){
int pos = Rank(x);
node *l = find(pos),*r = find(pos + 2);
splay(l,t),splay(r,l);
top++;*top=r->l;
r->l = t;
pushup(r),pushup(l);
}
int kth(int x){
return find(x + 1)->val;
}
int pre(int x){
return kth(Rank(x)-1);
}
int nxt(int x){
return kth(Rank(x + 1));
}
int n;
int main(){
// freopen("P3369_14.in","r",stdin);
// freopen("out.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
New(t),t->sz = 0;
New(t + 1),t[1].val = -1e9,t[1].r = t + 2,t[1].sz = 2;
New(t + 2),t[2].val = 1e9,t[2].fa = t + 1,t[2].sz = 1;
for(int i = 1;i < N;i++) ++top,*top=t + i;
cin >> n;
for(int i = 1;i <= n;i++){
int opt,k;cin >> opt >> k;
if(opt == 1) insert(k);
if(opt == 2) erase(k);
if(opt == 3) cout << Rank(k) << '\n';
if(opt == 4) cout << kth(k) << '\n';
if(opt == 5) cout << pre(k) << '\n';
if(opt == 6) cout << nxt(k) << '\n';
}
}