0分求助
查看原帖
0分求助
428690
Astatinear楼主2021/7/21 16:57

本地ac 洛谷TLE?

#include<bits/stdc++.h>
using namespace std;
int heap[1000005];
int n;
long long ans;
int t;
int insert(int p)
{
	while(p>=2)
	{
		int k=floor(p/2.0);
		if(heap[k]>heap[p])
		swap(heap[k],heap[p]),p=k;
		else
		break;
	}
}
int hou(int q)
{
	while(q<=n)
	{
		if(heap[q*2]<heap[q*2+1])
		{
			if(heap[q*2]<heap[q])
			swap(heap[q*2],heap[q]),q=q*2;
			else
			break;
		}
		else
		{
			if(heap[q*2+1]<heap[q])
			swap(heap[q*2+1],heap[q]),q=q*2+1;
			else
			break;
		}
	}
}
int main()
{
	scanf("%d",&t);
	memset(heap,127,sizeof(heap));
	while(t--)
	{
		int bj=0;
		scanf("%d",&bj);
		if(bj==1)
		{
			int a;
			scanf("%d",&a);
			n++;
			heap[n]=a;
			insert(n); 
		}
		else if(bj==2)
		{
			printf("%d\n",heap[1]);
		}
		else
		{
			heap[1]=INT_MAX;
			swap(heap[1],heap[n]);
			n--;
			hou(1);
		}
	} 
}
2021/7/21 16:57
加载中...