#include <bits/stdc++.h>
using namespace std;
int q,op,x;
int rt=0x3f3f3f3f;
int a[10005];
int cnt[10005];
int ls[10005];
int rs[10005];
int t[10005];
int rk(int i,int x) {
if(i==0) {
return 0;
}
if(a[i]<x) {
return cnt[ls[i]]+1+rk(rs[i],x);
}
else {
return rk(ls[i],x);
}
}
int Rk(int i,int x,int sum) {
if(i==0) {
return 0;
}
if(cnt[ls[i]]+1+sum==x) {
return a[i];
}
else if(cnt[ls[i]]+1+sum<x) {
return Rk(rs[i],x,sum+ls[i]+1);
}
else {
return Rk(ls[i],x,sum);
}
}
void insert(int i,int x) {
if(i==0) {
return;
}
cnt[i]++;
if(a[x]>a[i]) {
if(rs[i]) {
insert(rs[i],x);
}
else {
rs[i]=x;
}
}
else if(a[x]<a[i]) {
if(ls[i]) {
insert(ls[i],x);
}
else {
ls[i]=x;
}
}
}
int solve(int i,int x,int ans) {
if(x<=a[i]) {
if(ls[i]==0) return ans;
return solve(ls[i],x,ans);
}
else {
if(rs[i]==0) return (a[i]<x)?a[i]:ans;
return max(a[i],solve(rs[i],x,ans));
}
}
int so1ve(int i,int x,int ans) {
if(x>=a[i]) {
if(rs[i]==0) return ans;
return so1ve(rs[i],x,ans);
}
else {
if(ls[i]==0) return (a[i]>x)?a[i]:ans;
return min(a[i],so1ve(ls[i],x,ans));
}
}
void Print(int i) {
if(i==0) {
return;
}
cout<<a[i]<<"的左孩子是"<<a[ls[i]]<<endl;
cout<<a[i]<<"的右孩子是"<<a[rs[i]]<<endl;
Print(ls[i]);
Print(rs[i]);
}
int num;
int main() {
cin>>q;
while(q--) {
cin>>op>>x;
if(op==1) {
cout<<rk(rt,x)+1<<endl;
}
else if(op==2) {
cout<<Rk(rt,x,0) <<endl;
}
else if(op==3) {
cout<<solve(rt,x,-2147483647)<<endl;
}
else if(op==4) {
cout<<so1ve(rt,x,2147483647)<<endl;
}
else {
a[++num]=x;
if(num==1) {
rt=1;
cnt[rt]--;
}
cnt[num]++;
insert(rt,num);
}
}
return 0;
}