编程题
### 问题描述 笛卡尔树模板题。 笛卡尔树是一种二叉树,每一个结点由一个键值二元组 $(k,w)$ 构成。要求 $k$ 满足二叉搜索树的性质,而 $w$ 满足堆的性质。如果笛卡尔树的 $k,w$ 键值确定,且 $k$ 互不相同,$w$ 互不相同,那么这个笛卡尔树的结构是唯一的。 当我们把数组元素值当作键值 $w$,把数组下标当作键值 $k$ 来构建笛卡尔树,该笛卡尔树的任意一棵子树内的下标是连续的一个区间,在算法竞赛中有较为广泛的应用。 给定长度为 $n$ 的**排列** $a_1,a_2,...,a_n$,将该排列建成元素值满足大根堆性质(元素值作为 $w$)、下标满足二叉搜索树性质(下标作为 $k$)的笛卡尔树。按 $k$ 从小到大的顺序输出笛卡尔树上每个结点的左右子结点的 $k$ 值,不存在某子节点则在对应位置输出 `0`。 ------ 一个长度为 $n$ 的排列是指将 $1$ 到 $n$ 之间共 $n$ 个互不相同的正整数以任意顺序摆放形成的数组。例如 $[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是一个排列($2$ 在数组中出现了两次),$[1,3,4]$ 也不是一个排列($n=3$ 但在数组中有 $4$)。 ### 输入格式 第一行,一个正整数 $n(1 \le n \le 2\times10^5)$,表示排列的长度。 第二行,$n$ 个正整数 $a_1,a_2,\dots,a_n$,表示给定排列。 ### 输出格式 共 $n$ 行,第 $i$ 行包括两个整数 $l_i,r_i$,表示笛卡尔树上 $k=i$ 的结点的左右子节点的 $k$ 值。 ### 样例输入 ```text 6 2 4 1 5 3 6 ``` ### 样例输出 ```text 0 0 1 3 0 0 2 5 0 0 4 0 ``` ### 说明 ![图片描述](https://dn-simplecloud.shiyanlou.com/questions/uid1881617-20230815-1692070202909) ### 评测数据规模 $1\le n \le 2\times 10^5,1\le a_i\le 2\times 10^5$。
查看答案
赣ICP备20007335号-2