44分,手写堆,求助
查看原帖
44分,手写堆,求助
331189
mamingxiao楼主2021/1/21 17:23
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main()
{
    int n,op,x,w=0,j;
    cin>>n;
    for(int i=0;i<n;i++)
	{
		cin>>op;
		if(op==1)
		{
			cin>>x;
			w++;
			a[w]=x;
			j=w;
			while(a[j]<a[j/2]&&j/2>0)
			{
				swap(a[j],a[j/2]);
				j/=2;
			}
		}
		else if(op==2)
		{
			cout<<a[1]<<endl;
		}
		else if(op==3)
		{
			swap(a[1],a[w]);
			a[w]=0;
			w--;
			j=1;
			while(a[j]>min(a[j*2],a[j*2+1])&&j*2<=w)
			{
				if(a[j*2]<=a[j*2+1])
				{
					swap(a[j],a[j*2]);
					j*=2;
				}
				else
				{
					if(j*2+1<=w)
					{
						swap(a[j],a[j*2+1]);
						j=j*2+1;
					}
					else
					{
						swap(a[j],a[j*2]);
						j*=2;
					}
				}
			}
		}
	}
	return 0;
}
2021/1/21 17:23
加载中...