#include <iostream>
#include <queue>
#include <set>
#include <vector>
using namespace std;
//本题是类模板题,实质上就是操作一个多重集合
int main() {
multiset<int> a;//定义一个多重集合
int n{};//进行n次操作
cin>>n;
while(n--)
{
int op{};//定义操作类型
cin>>op;
if(op==1)//第一种,插入
{
int x{};
cin>>x;
a.insert(x);
}
if(op==2)//第二种,查询最小值
{
auto it=a.begin();//因为集合里面的数据是有序的,我们可以输出begin对应的值
cout<<*it<<endl;
}
if(op==3)//第三种,查询最大值
{
auto it=a.end();
it--;//原理同上,但要记得前移一位
cout<<*it<<endl;
}
if(op==4)//第四种,删除一个最小值
{
auto it=a.begin();//对于单个数据的删除,我们只需要删除它的指针即可
a.erase(it);
}
if(op==5)//第五种,删除一个最大值
{
auto it=a.end();
it--;//原理同上,也要记得前移一位
a.erase(it);
}
}
return 0;
}
// 64 位输出请用 printf("%lld")