36pts
查看原帖
36pts
966217
Ying_e楼主2024/4/6 09:31
#include <bits/stdc++.h>
using namespace std;
int a[1000010];int n;int i;
void up(int p)
{
	while(p>1)
	{
		if(a[p]<a[p/2]) swap(a[p],a[p/2]),p/=2;
		else break;
	}
}
void insert(int val)
{
	a[++i] = val;
	up(i);
}
void down(int p)
{
	int s = p*2;
	while(s <= i)
	{
		if(s>i&&a[s]<a[s+1]) s++;
		if(a[s]>a[p])
		{
			swap(a[s],a[p]);
			p=s,s=p*2;
		}
		else{
			break;
		}
	}
}
void Remove()
{
	a[1]=a[i--];
	down(1);
}
int gettop()
{
	return a[1];
}
int main()
{
	cin >> n;
	while(n--)
	{
		int t,x;
		cin >> t;
		if(t==1) cin >> x,insert(x);
		if(t==2) cout << gettop() << endl;
		if(t==3) Remove();
	}
} 
2024/4/6 09:31
加载中...