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)))``