SP1790 HEAPULM - Binary Search Heap Construction

题目描述

堆是这样的一种树:每个内结点被赋了一个优先级,使得每个内结点的优先级小于其双亲结点的优先级。因此,根结点具有最大的优先级,这也是堆可以用于实现优先队列和排序的原因。 在一棵二叉树中的每个内结点有标号和优先级,如果相应于标号它是一棵二叉搜索树,相应于优先级它是一个堆,那么它就被称为 $treap$。给出一个标号 - 优先级对组成的集合,请构造一个包含了这些数据的 $treap$。

输入格式

包含若干测试用例,每个测试用例首先给出整数 $n$($1\leq n\leq 50000$),后面跟着 $n$ 对的字符串和整数 $l1/p1$, ..., $ln/pn$,表示每个结点的标号和优先级。 字符串是非空的,由小写字母组成;数字是非负的整数。最后的一个测试用例后面以一个 $0$ 为结束。

输出格式

对每个测试用例在一行中输出一个 $treap$, $treap$ 给出顶点的说明。$Treap$ 的形式为 ``(< left sub-treap >< label >/< priority >< right sub-treap >)``. 子 $treaps$ 递归输出,如果是树叶就没有输出。 ### 样例输入 ``7 a/7 b/6 c/5 d/4 e/3 f/2 g/1`` ``7 a/1 b/2 c/3 d/4 e/5 f/6 g/7`` ``7 a/3 b/6 c/4 d/7 e/2 f/5 g/1`` ``0`` ### 样例输出 ``(a/7(b/6(c/5(d/4(e/3(f/2(g/1)))))))`` ``(((((((a/1)b/2)c/3)d/4)e/5)f/6)g/7)`` ``(((a/3)b/6(c/4))d/7((e/2)f/5(g/1)))``