一、STL 优先队列:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#define ll long long
#define llu unsigned ll
using namespace std;
int main(void)
{
int n;
int op,x;
priority_queue<int,vector<int>,greater<int> >q;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
q.push(x);
}
else if(op==2)
printf("%d\n",q.top());
else q.pop();
}
return 0;
}
二、手写:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#define ll long long
#define llu unsigned ll
using namespace std;
const int maxn=1000100;
struct heap
{
int n;
int a[maxn];
void up(int p)
{
while(p>1)
{
if(a[p]<a[p/2])
swap(a[p],a[p/2]),p=p/2;
else break;
}
}
void down(int p)
{
int s=p*2;
while(s<=n)
{
if(s<n&&a[s]>a[s+1]) s++;
if(a[s]<a[p]) swap(a[s],a[p]),p=s,s=p*2;
else break;
}
}
void push(int x)
{
a[++n]=x;
up(n);
}
void pop(void)
{
a[1]=a[n--];
down(1);
}
int top(void)
{
return a[1];
}
}q;
int main(void)
{
int n;
int op,x;
priority_queue<int,vector<int>,greater<int> >q;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
q.push(x);
}
else if(op==2)
printf("%d\n",q.top());
else q.pop();
}
return 0;
}