题目描述
给出一个长为N(N<=100000)的整数序列,建立一个大根堆,从1至N输出堆中元素
输入
第一行一个数N,表示数列长度
第2至N+1行,每行一个正整数
输出
输出N行,每行一个数。
样例输入
5
4
3
1
8
1
样例输出
8
4
1
3
1
解题思路:
这道题的题目描述写的很明白,建大根堆。模板题,只要把模板套套上去就可以了。
代码:(请不要直接拷贝哦)
#include<cstdio>
int a[100005],n;
using namespace std;
void dfs(int x)
{
intl,r,z;
l=x*2;
r=x*2+1;
if(l<=n)
{
z=l;
if((r<=n)&&(a[r]>a[l]))
z=r;
if(a[z]>a[x])
{
intt=a[z];
a[z]=a[x];
a[x]=t;
dfs(z);
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=n/2;i>=1;i--)
dfs(i);
for(int i=1;i<=n;i++)
printf("%d\n",a[i]);
return0;
}