0pts TLE+WA
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
template<typename Tp>
inline void Read(Tp &x) {
x = 0; bool w = 0; char c = getchar();
for (; c < '0' || c > '9'; c = getchar()) if (c == '-') w ^= 1;
for (; c >= '0' && c <= '9'; c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
if (w) x = -x;
}
const int N = (int)5e5 + 5;
int ch[N][2], val[N], pri[N], sz[N], siz;
inline int New(int key) {
sz[++siz] = 1, val[siz] = key;
pri[siz] = rand(); return siz;
}
inline void Update(int x) {
sz[x] = sz[ch[x][0]] + sz[ch[x][1]];
}
inline void Split(int now, int key, int &x, int &y) {
if (!now) x = y = 0;
else {
if (val[now] <= key) x = now, Split(ch[now][1], key, ch[now][1], y);
else y = now, Split(ch[now][0], key, x, ch[now][0]);
Update(now);
}
}
inline int Merge(int x, int y) {
if (!x || !y) return x + y;
if (pri[x] < pri[y]) {
ch[x][1] = Merge(ch[x][1], y);
Update(x); return x;
}
else {
ch[y][0] = Merge(x, ch[y][0]);
Update(y); return y;
}
}
inline int Kth(int now, int k) {
while (1) {
if (k <= sz[ch[now][0]]) now = ch[now][0];
else
if (k == sz[ch[now][0]] + 1) return now;
else k -= sz[ch[now][0]] + 1, now = ch[now][1];
}
}
inline void Insert(int key, int &rt) {
int x, y; Split(rt, key, x, y);
rt = Merge(x, Merge(New(key), y));
}
inline void Del(int key, int &rt) {
int x, y, z; x = y = z = 0;
Split(rt, key, x, z); Split(x, key - 1, x, y);
rt = Merge(Merge(x, y = Merge(ch[y][0], ch[y][1])), z);
}
int n, rt[N];
int main(void) {
int Q, ver, opt, x, y, z; Read(Q);
for (int i = 1; i <= Q; ++i) {
Read(ver), Read(opt), Read(x);
rt[i] = rt[ver];
switch (opt) {
case 1: Insert(x ,rt[i]); break;
case 2: Del(x, rt[i]); break;
case 3: y = z = 0; Split(rt[i], x - 1, y, z);
printf("%d\n", sz[y] + 1); break;
case 4: printf("%d\n", val[Kth(rt[i], x)]); break;
case 5: y = z = 0; Split(rt[i], x - 1, y, z);
if (!y) printf("%d\n", -(1ll << 31) + 1);
else printf("%d\n", val[Kth(y, sz[y])]), rt[i] = Merge(y, z);
break;
default: y = z = 0; Split(rt[i], x, y, z);
if (!y) printf("%d\n", 1ll << 31 - 1);
else printf("%d\n", val[Kth(z, 1)]), rt[i] = Merge(y, z);
}
}
return 0;
}