3234 - 笛卡尔树

题目描述

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

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

  1. 每个节点的编号满足二叉搜索树的性质。

  2. 节点 i 的权值为 p_i,每个节点的权值满足小根堆的性质。

请编程输出构建笛卡尔树之后每个结点编号,以及每个结点的左右孩子的编号。

输入

第一行一个整数 n

第二行一个排列 p_1 \dots p_n

输出

l_i,r_i 分别表示节点 i 的左右儿子的编号(若不存在则为 0)。

输出 N 行,按照读入结点 p_1,\dots,p_n 的顺序,输出每个结点编号、结点的权值 p_i 、左孩子编号 l_i、右孩子编号 r_i

样例

输入

5
3 1 4 5 2

输出

1 3 0 0
2 1 1 5
3 4 0 4
4 5 0 0
5 2 3 0
说明

【数据范围】

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

对于 90\% 的数据,n \le 10^5

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

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 25
通过人数 21
金币数量 2 枚
难度 基础


上一题 下一题