二叉堆44pts
查看原帖
二叉堆44pts
1053122
shy_lihui楼主2025/1/12 13:19
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1000000005];
int siz=0;
int depth()//二分求树的高度 
{
	int l=0,r=20;
	int t=0;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if(a[1<<mid]==0)
		{
			t=1<<mid;
			r=mid-1;
		}
		else
		{
			l=mid+1;
		}
	}
	return t;
}
int tree_min()
{
	return a[1];
}
void tree_delete()
{
	swap(a[1],a[siz]);
	siz--;
	int i=1;
	while(i<=siz/2)
	{
		int s=2*i;
		if(s+1<=siz && a[s+1]<a[s])
		{
			i++;
		}
		if(a[i]>a[s])
		{
			swap(a[i],a[s]);
			i=s;
		}
		else
		{
			break;
		}
	}
}
void tree_add(int x)
{
	a[siz]=x;
	int t=siz;
	while(t!=1)
	{
		int t2=t/2;
		if(a[t]<a[t2])
		{
			swap(a[t],a[t2]);
			t=t2;
		}
		else
		{
			break;
		}
	}
}
bool flag=1;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	while(n--)
	{
		int op;
		cin>>op;
		if(op==1)
		{
			int x;
			cin>>x;
			siz++;
			tree_add(x);
			
		}
		else if(op==2)
		{
			cout<<tree_min()<<'\n';
		}
		else if(op==3)
		{
			tree_delete();
		}
	}
	return 0;
}
2025/1/12 13:19
加载中...