#include <cstdio>
#include <iostream>
#define MAXN 100010
using namespace std;
class priority_queue{
int sizet,heap[MAXN];
public:
void clear(){
sizet=0;
}
void push(int x){
int i=sizet++;
while(i>0){
int p=(i-1)/2;
if(heap[p]<x)
{
heap[i]=heap[p];
i=p;
}
else break;
}
heap[i]=x;
}
int top(){
return heap[0];
}
void pop(){
int i=0;
heap[i]=heap[--sizet];
int child=i*2+1;
while(child<sizet){
if(child+1<sizet){
if(heap[child]>heap[child+1]&&heap[child]>heap[i])
{
swap(heap[child],heap[i]);
i=child;
}
else if(heap[child+1]>heap[child]&&heap[child+1]>heap[i]){
swap(heap[child+1],heap[i]);
i=child+1;
}
else break;
}
else{
if(heap[child]>heap[i]){
swap(heap[child],heap[i]);
i=child;
}
else break;
}
child=i*2+1;
}
}
bool empty(){
if(sizet==0) return true;
else return false;
}
};
int n,v;
char op[3];
priority_queue pq;
int main(){
while(scanf("%d",&n)!=EOF){
pq.clear();
for(int i=1;i<=n;i++){
scanf("%s",op);
if(op[0]=='A'){
scanf("%d",&v);
pq.push(v);
}
else {
printf("%d\n",pq.top());
pq.pop();
}
}
}
return 0;
}
用二叉堆实现优先队列
最新推荐文章于 2023-08-07 21:36:33 发布