#P5854. 【模板】笛卡尔树(Cartesian Tree)

0

【模板】笛卡尔树(Cartesian Tree)

【模板】笛卡尔树(Cartesian Tree)

题目描述

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

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

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

输入格式

第一行一个整数 nn。

第二行一个排列 p1…np_{1 \dots n}。

输出格式

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

一行两个整数,分别表示 xor⁡i=1ni×(li+1)\operatorname{xor}_{i = 1}^n i \times (l_i + 1) 和 xor⁡i=1ni×(ri+1)\operatorname{xor}_{i = 1}^n i \times (r_i + 1)。

样例输入 #1

5
4 1 3 2 5

样例输出 #1

19 21

数据范围

【样例解释】

ii lil_i rir_i
11 00
22 11 44
33 00
44 33 55
55 00

【数据范围】

对于 30%30\% 的数据,n≤103n \le 10^3。

对于 60%60\% 的数据,n≤105n \le 10^5。

对于 80%80\% 的数据,n≤106n \le 10^6。

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

对于 100%100\% 的数据,1≤n≤1071 \le n \le 10^7。

知识点与难度

本题涉及的知识点从属于 CSP-S,难度(CF Rating):1700。


测试点分布

Subtask 分值 测试点编号 说明
0 10 1 样例
1 20 2~7 小规模 n≤1000 / 特殊: n=1 及全升序/全降序退化链
2 8~13 中等规模 n≤100000
3 25 14~19 大规模 n≤500000 交替锯齿排列与分块单调排列
4 20~25 满规模 n=1000000 单调栈线性建树压力测试

出处:原题链接