#include<iostream>
#include<random>
std::mt19937 rnd(20230125);
const int sz = 1e4 + 10;
const int inf = 0x7fffffff;
struct BST {
struct node {
int val, cnt, lson, rson, size;
unsigned key;
node& operator^=(const int &v) {
val = v;
cnt = size = 1;
key = rnd();
return *this;
}
} tree[sz];
int num, root;
void resize(int pos) {
tree[pos].size = tree[pos].cnt + tree[tree[pos].lson].size + tree[tree[pos].rson].size;
}
void rotateleft(int &p) {
int tmp = tree[p].rson;
tree[p].rson = tree[tmp].lson;
tree[tmp].lson = p;
tree[p].size = tree[tmp].size;
resize(p);
p = tmp;
}
void rotateright(int &p) {
int tmp = tree[p].lson;
tree[p].lson = tree[tmp].rson;
tree[tmp].rson = p;
tree[p].size = tree[tmp].size;
resize(p);
p = tmp;
}
void insert(int &pos, int val) {
if (pos == 0) return pos = ++num, tree[pos] ^= val, void();
tree[pos].size++;
if (tree[pos].val == val) tree[pos].cnt++;
else if (val < tree[pos].val) {
insert(tree[pos].lson, val);
if (tree[pos].key > tree[tree[pos].lson].key) rotateright(pos);
} else {
insert(tree[pos].rson, val);
if (tree[pos].key > tree[tree[pos].rson].key) rotateleft(pos);
}
}
int rank(int pos, int val) {
if (pos == 0) return 0;
if (tree[pos].val == val) return tree[tree[pos].lson].size + 1;
else if (val > tree[pos].val)
return tree[tree[pos].lson].size + tree[pos].cnt + rank(tree[pos].rson, val);
else return rank(tree[pos].lson, val);
}
int kthElement(int pos, int k) {
if (pos == 0) return 0;
if (k <= tree[tree[pos].lson].size) return kthElement(tree[pos].lson, k);
else if (k > tree[tree[pos].lson].size + tree[pos].cnt)
return kthElement(tree[pos].rson, k - tree[tree[pos].lson].size - tree[pos].cnt);
else return tree[pos].val;
}
int prev(int pos, int val) {
int res = -inf;
while (pos != 0) {
if (val > tree[pos].val)
res = tree[pos].val, pos = tree[pos].rson;
else pos = tree[pos].lson;
}
return res;
}
int post(int pos, int val) {
int res = inf;
while (pos != 0) {
if (val < tree[pos].val)
res = tree[pos].val, pos = tree[pos].lson;
else pos = tree[pos].rson;
}
return res;
}
} treap;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
std::cin >> n;
while (n--) {
int op, x;
std::cin >> op >> x;
if (op == 1) std::cout << treap.rank(treap.root, x) << "\n";
if (op == 2) std::cout << treap.kthElement(treap.root, x) << "\n";
if (op == 3) std::cout << treap.prev(treap.root, x) << "\n";
if (op == 4) std::cout << treap.post(treap.root, x) << "\n";
if (op == 5) treap.insert(treap.root, x);
}
return 0;
}