ARC120D题解

· · 题解

首先楼上已经证明过一定是较小的 n 个数与较大的 n 个数匹配。

然后对原数组从左到右扫一遍,如果遇到的数是较小的 n 个数之中的,那么将其放入第一个队列中。否则放入第二个队列中。

如果两个队列的元素个数均不为零,则将队首进行匹配。

证明:如果我匹配的数字是 ij,那么 ij 之间的数一定不可能与 i 之前的数匹配(否则为什么不和 i 匹配),同时 ij 之间的数都一定已经匹配过了(否则 ij 至少有一个不是队首)。由于已知左右括号数均为 n 个,故得证。

时间复杂度还是 O(n\log n),因为要排序。