92分求助
查看原帖
92分求助
490978
小超手123楼主2022/2/19 14:49
#include<bits/stdc++.h>
#define maxn 10010
using namespace std;
long long n,len,num,a[maxn],ans,x,opt; //小根堆 
void put(long long x){ //插入一个x 
	a[++len]=x;
	long long son=len,father;
	while(son>1){
		father=son/2;
		if(a[father]<=a[son])break;
		else swap(a[father],a[son]);
		son=father;
	}
}
long long get(){ //删除根节点 
    long long res=a[1];
	a[1]=a[len];
	len--;
	long long son=1,father=1;
	while(father*2<=len){ 
	    son*=2;
		if(son<len&&a[son+1]<a[son])son++;
		if(a[father]<=a[son])break;
		else swap(a[father],a[son]);
		father=son;
	}
	return res;
}
int main() {
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>opt;
		if(opt==1){
			cin>>x;
			put(x);
		}
		else if(opt==2){
			cout<<a[1]<<endl;
		}
		else get();
	}
    return 0;
}
/*

*/
2022/2/19 14:49
加载中...