44pts 求助
查看原帖
44pts 求助
536439
YONIC楼主2022/5/8 09:14
#include<bits/stdc++.h>
#define M7 (int)(1e6+3)
using namespace std;
int n,x;
struct PQueue{
    int value[M7];
    int size=0;
    void up(int x){
        while(x>1&&value[x]<value[x>>1]){
            int temp;
            temp=value[x];
            value[x]=value[x>>1];
            value[x>>1]=temp;
            x>>=1;
        }
    }
    void push(int x){
        value[++size]=x;
        up(size);
    }
    void pop(){
        value[1]=value[size];
        --size;
        int x=1;
        while((x<<1)<size){
            if(x<<1==size||value[x<<1]<value[x<<1|1]){
                int temp;
                temp=value[x];
                value[x]=value[x<<1];
                value[x<<1]=temp;
                x<<=1;
            }
            else{
                int temp;
                temp=value[x];
                value[x]=value[x<<1|1];
                value[x<<1|1]=temp;
                x<<=1;
                ++x;
            }
        }
    }
    int top(){return value[1];}
    bool empty(){return !size;}
}Q;
int main(){
	scanf("%d",&n);
	while(n--){
		scanf("%d",&x);
		if(x==1){
			scanf("%d",&x);
			Q.push(x);
		}
		else if(x==2){printf("%d\n",Q.top());}
		else if(x==3) Q.pop();
	}
	return 0;
}
2022/5/8 09:14
加载中...