44pts求助
查看原帖
44pts求助
655791
erok楼主2022/9/28 15:47
#include<iostream>
using namespace std;
struct node {
	int cnt=0;
	int element[100101];
	void up(int x) {
		if(x==1) return ;
		if(element[x]>element[x/2]) return ;
		swap(element[x],element[x/2]);
		up(x/2);
	}
	void down(int x) {
		if(x>cnt) return ;
		int s=x*2;
		if(element[s]>element[s+1]&&s+1<cnt) s++;
		if(s>cnt||element[x]<element[s]) return ;
		swap(element[x],element[s]);
		down(s);
	}
	void pop() {
		element[1]=element[cnt--];
		down(1);
	}
	void push(int sum) {
		element[++cnt]=sum;
		up(cnt);
	}
	int top() {
		return element[1];
	}
	bool empty() {
		return (cnt==0);
	}
	int siz() {
		return cnt;
	}
} heap;
int n,a,ans;
int main() {
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>ans;
		if(ans==1) {
			cin>>a;
			heap.push(a);
		}
		if(ans==2)
			cout<<heap.top()<<endl;
		if(ans==3)
			heap.pop();
	}
	return 0;
}
2022/9/28 15:47
加载中...