Rt,跳表挂了,WA44分求助。
使用了随机数使得输出也是随机的/kk
#define N 100005
#define M 20
struct node{
int val, nxt[M + 1], sum[M + 1];
}a[N];
#define nt(x, p) a[x].nxt[p]
int idx, u[M];
inline int g(){int s = 0;while(s + 1 < M && (rand() & 4))s ++;return s;}
void ask(int x){
int p = M - 1, w = 0;
while(p >= 0){
while(nt(w, p) && a[nt(w, p)].val < x)w = nt(w, p);
u[p--] = w;
}
}
void ins(int x){
ask(x); int p = ~0;
if(a[nt(u[0], 0)].val == x){
while(++p < M){
if(a[nt(u[p], p)].val == x)a[nt(u[p], p)].sum[p] ++;
else a[u[p]].sum[p]++;
}
}
else{
int q = g(), w = nt(u[0], 0);
a[++idx].sum[0] = 1, a[idx].val = x;
nt(idx, 0) = w, nt(u[0], 0) = idx;
rep(i, 1, q){
a[idx].sum[i] = a[idx].sum[i - 1];
while(w != nt(u[i], i))a[idx].sum[i] += a[w].sum[i - 1], w = nt(w, i - 1);
nt(idx, i) = nt(u[i], i), nt(u[i], i) = idx, a[u[i]].sum[i] -= a[idx].sum[i] - 1;
}
rep(i, q + 1, M - 1)a[u[i]].sum[i] ++;
}
}
void del(int x){
ask(x); int p = ~0;
assert(a[nt(u[0], 0)].val == x);
bool flag = a[nt(u[0], 0)].sum[0] == 1;
while(++p < M){
if(a[nt(u[p], p)].val == x){
if(flag) nt(u[p], p) = a[nt(u[p], p)].nxt[p], a[u[p]].sum[p] += a[nt(u[p], p)].sum[p] - 1;
else a[nt(u[p], p)].sum[p]--;
}
else a[u[p]].sum[p]--;
}
}
int Rank(int x){
int p = M - 1, w = 0, ans = 1;
while(p >= 0){
while(nt(w, p) && a[nt(w, p)].val < x)ans += a[w].sum[p], w = nt(w, p);
p--;
}
if(!nt(w, 0))ans++;
return ans;
}
int get(int k){
int p = M - 1, w = 0;
while(p >= 0){
while(k > a[w].sum[p])k -= a[w].sum[p], w = nt(w, p);
p--;
}return a[nt(w, 0)].val;
}
int Nxt(int x){
ask(x); int p = nt(u[0], 0);
if(a[p].val == x)return a[nt(p, 0)].val;
return a[p].val;
}
int Pre(int x){
ask(x);return a[u[0]].val;
}
int main() {
//freopen("P3369_3.in","r",stdin);
srand(time(0));
//int T = read();while(T--)solve();
int T = read();
a[0].val = inf_;
rep(i, 0, M - 1)a[0].sum[i] = 1;
while(T--){
int op = read(), x = read();
if(1 == op)ins(x);
else if(2 == op)del(x);
else if(3 == op)printf("%d\n", Rank(x));
else if(4 == op)printf("%d\n", get(x));
else if(5 == op)printf("%d\n", Pre(x));
else printf("%d\n", Nxt(x));
}
return 0;
}