#L0762. 笛卡尔树构建

笛卡尔树构建

题目背景

本题部分写法可能触发 GCC15.1 在 O2 下的编译器 bug。建议 C++ 用户以 C++14(GCC9)提交代码。

题目描述

给定一个 1n1 \sim n 的排列 pp,构建其笛卡尔树。

即构建一棵二叉树,满足:

  1. 每个节点的编号满足二叉搜索树的性质。
  2. 节点 ii 的权值为 pip_i,每个节点的权值满足小根堆的性质。

输入格式

第一行一个整数 nn

第二行一个排列 p1,p2,,pnp_1, p_2, \dots, p_n

输出格式

li,ril_i, r_i 分别表示节点 ii 的左右儿子的编号(若不存在则为 00)。

一行两个整数,分别表示 $\displaystyle\bigoplus_{i=1}^{n} i \times (l_i + 1)$ 和 $\displaystyle\bigoplus_{i=1}^{n} i \times (r_i + 1)$。

样例

5
4 1 3 2 5
19 21

提示

【样例解释】

$i$$l_i$$r_i$
$1$$0$$0$
$2$$1$$4$
$3$$0$$0$
$4$$3$$5$
$5$$0$$0$

【数据范围】

对于 30%30\% 的数据,n103n \le 10^3

对于 60%60\% 的数据,n105n \le 10^5

对于 80%80\% 的数据,n106n \le 10^6

对于 90%90\% 的数据,n5×106n \le 5 \times 10^6

对于 100%100\% 的数据,1n1071 \le n \le 10^7

难度 普及+/提高-
通过率
尝试 0
已通过 0
ID
1490
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者