#include <cstdio>
#include <random>
using namespace std;
const int N = 100005;
int rand() {
static mt19937 engine(0);
uniform_int_distribution < int > dist(-0x7fffffff - 1, 0x7fffffff);
return dist(engine);
}
struct Node {
int val, pri;
int ch[2];
int size;
} node[N];
int cnt, root = 0;
void pushup(int x) {
node[x].size = node[node[x].ch[0]].size + node[node[x].ch[1]].size + 1;
}
void newnode(int x) {
cnt++;
node[cnt].val = x;
node[cnt].pri = rand();
node[cnt].size = 1;
}
int merge(int x, int y) {
if (x == 0 || y == 0) {
return x + y;
} else {
if (node[x].pri < node[y].pri) {
node[x].ch[1] = merge(node[x].ch[1], y);
pushup(x);
return x;
} else {
node[y].ch[0] = merge(x, node[y].ch[0]);
pushup(y);
return y;
}
}
}
void split(int p, int v, int & x, int & y) {
if (p == 0) {
x = y = 0;
} else {
if (v <= node[p].val) {
y = p;
split(node[p].ch[0], v, x, node[p].ch[0]);
} else {
x = p;
split(node[p].ch[1], v, node[p].ch[1], y);
}
pushup(p);
}
}
int find_kth(int k) {
int p = root;
while (true) {
if (k <= node[node[p].ch[0]].size) {
p = node[p].ch[0];
} else if (k == node[node[p].ch[0]].size + 1) {
return node[p].val;
} else {
k -= node[node[p].ch[0]].size + 1;
p = node[p].ch[1];
}
}
}
int find_max(int p) {
while (node[p].ch[1] != 0) {
p = node[p].ch[1];
}
return node[p].val;
}
int find_min(int p) {
while (node[p].ch[0] != 0) {
p = node[p].ch[0];
}
return node[p].val;
}
int main() {
int n;
scanf("%d", &n);
int p1, p2, p3;
for (int op, x, i = 1; i <= n; i++) {
scanf("%d %d", &op, &x);
if (op == 1) {
split(root, x, p1, p2);
newnode(x);
root = merge(merge(p1, cnt), p2);
} else if (op == 2) {
split(root, x, p1, p2);
split(p1, x - 1, p1, p3);
p3 = merge(node[p3].ch[0], node[p3].ch[1]);
root = merge(merge(p1, p3), p2);
} else if (op == 3) {
split(root, x - 1, p1, p2);
printf("%d\n", node[p1].size + 1);
root = merge(p1, p2);
} else if (op == 4) {
printf("%d\n", find_kth(x));
} else if (op == 5) {
split(root, x - 1, p1, p2);
printf("%d\n", find_max(p1));
root = merge(p1, p2);
} else {
split(root, x, p1, p2);
printf("%d\n", find_min(p2));
root = merge(p1, p2);
}
}
return 0;
}