P1099 - 构建二叉堆

题目描述

输入一组无序的数组,然后构建出一个大顶堆

构建大顶堆的过程是:

从最后一个非叶子节点到根节点开始进行下沉操作,下沉操作是:当前节点与左右孩子比较,如果比孩子大,则已调整为堆,如果比孩子小,则与较大的孩子交换,交换到新的位置后,继续向下比较,一直比较到叶子节点

比如输入的数据是:

10
4 1 3 2 16 9 10 14 8 7

构建大顶堆的过程是:

1.png 2.png 3.png 4.png 5.png 6.png

输入格式

第1行,1个正整数n代表数组的大小

第2行,n个整数,数组中的元素,使用空格分隔

输出格式

输出构建的大顶堆的每个节点的值,从1到n号节点的值,使用空格分隔

输入输出样例

输入样例 输出样例
10
4 1 3 2 16 9 10 14 8 7
16 14 10 8 7 9 3 2 4 1

数据范围与提示

100%的数据:$1 \le n \le 250$,每个节点的值在int取值范围内

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:P1099.in,输出文件名为:P1099.out