Responsive image

问题 C: 笛卡尔树

问题 C: 笛卡尔树

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 10
[提交][状态][讨论版][命题人:]

题目描述

笛卡尔树 是由一系列不同数字构成的二叉树。
树满足堆的性质,中序遍历返回原始序列。
最小笛卡尔树表示满足小根堆性质的笛卡尔树。
例如,给定序列 {8,15,3,4,1,5,12,10,18,6},则生成的最小堆笛卡尔树如图所示。
6a99f68a-6578-46e0-9232-fbf0adf3691f.jpg
现在,给定一个长度为 N 的原始序列,请你生成最小堆笛卡尔树,并输出其层序遍历序列。

输入描述

第一行包含整数 N。
第二行包含 N 个两两不同的整数,表示原始序列。

输出描述

共一行,输出最小堆笛卡尔树的层序遍历序列。

样例输入

10
8 15 3 4 1 5 12 10 18 6

样例输出

1 3 5 8 4 6 15 10 12 18

提示

数据范围

1≤N≤30,

原始序列中元素的取值范围 [−2147483648,2147483647]。

小根堆:小根堆的性质与大根堆类似,只不过在二叉树的结构中,根结点<子结点。例如{1,2,3}为小根堆,{1,3,2}同样也是小根堆。小根堆的根结点在整个堆中是最小的元素。

[提交][状态]
ACM算法攻关部