可以直接用multiset做、
我是用优先队列
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <set>
#include <vector>
using namespace std;
struct cmp1
{
bool operator ()(__int64 &a,__int64 &b)
{
return a>b;//最小值优先
}
};
priority_queue<__int64,vector<__int64>,cmp1> xx;
int main()
{
__int64 n,i;
__int64 maxx=-9223372036854775808;
__int64 minn;
scanf("%I64d",&n);
__int64 tmp,op;
__int64 tt;
for (i=1;i<=n;i++)
{
scanf("%I64d",&op);
if (op==1)
{
scanf("%I64d",&tmp);
if (xx.size()==0)
maxx=tmp;
xx.push(tmp);
if (tmp>maxx)
maxx=tmp;
}
else
if (op==2)
{
if (xx.size()!=0)
{
xx.pop();
}
}
else
if (op==3)
{
if (xx.size()==0)
{
printf("0\n");
}
else
{
printf("%I64d\n",(maxx));
}
}
}
return 0;
}