import sys
sys.setrecursionlimit(100000)
class Tree:
def __init__(self):
self.num = 0
self.count = 0
self.left = 0
self.right = 0
self.size = 0
cnt = 1
t = [Tree() for i in range(10 ** 4 + 1)]
def search_rank(num, root):
if num > t[root].num:
return search_rank(num, t[root].right) + t[t[root].left].size + t[root].count
elif num < t[root].num:
return search_rank(num, t[root].left)
return t[t[root].left].size + 1
def search_x(rank, root):
if not rank:
return -2147483647
if rank > cnt:
return 2147483647
if rank <= t[t[root].left].size:
return search_rank(rank, t[root].left)
elif rank <= t[t[root].left].size + t[root].count:
return t[root].num
return search_x(rank - t[t[root].left].size - t[root].count, t[root].right)
def getprev(num, root):
return search_x(search_rank(num, root) - 1, root)
def getsubs(num, root):
return search_x(search_rank(num, root) + 1, root)
def insert(num, root):
global cnt
if not t[root].num:
t[root].num = num
t[root].count = t[root].size = 1
return
if num > t[root].num:
if not t[root].right:
cnt += 1
t[root].right = cnt
t[t[root].right].num = num
t[t[root].right].count = t[t[root].right].size = 1
else:
insert(num, t[root].right)
elif num < t[root].num:
if not t[root].left:
cnt += 1
t[root].left = cnt
t[root].left = t[t[root].left].num = num
t[t[root].left].count = t[t[root].left].size = 1
else:
insert(num, t[root].left)
else:
t[root].count += 1
t[root].num = num
t[root].size = t[t[root].left].size + t[t[root].right].size + t[root].count
q = int(input().strip())
for i in range(q):
op, x = map(int, input().split())
if op == 1:
print(search_rank(x, 1))
elif op == 2:
print(search_x(x, 1))
elif op == 3:
print(getprev(x, 1))
elif op == 4:
print(getsubs(x, 1))
else:
insert(x, 1)