ARC080C Young Maids
题意 : 给定
根据下述步骤构造一个
首先,令
- 选择
中两个相邻元素,按原顺序设它们是 。从 中移除 ,将它们按顺序接在 的前面。
求可能的形成的字典序最小的
观察我们最终拿出的对子有什么特征,不难发现,对子形成一个括号序列,且要从里到外拿取。
考虑最后一步如何操作。
尝试寻找一个最小的,能作为最外层左括号的位置,不难发现只需下标是奇数就可以了。
接着寻找一个最小的,与之配对的右括号。这需要早左括号右边,且下标为偶数。
(这两步可以用线段树或 ST 表)
确定这一对括号之后,我们将序列分为了三部分 :
1 | ...A... ( ...B... ) ...C... |
这三部分的对子选取顺序是互不干扰的,故按照子问题处理。
处理完成后,我们得到了配对方案,以及对子之间的先后顺序(形如外向树)
在这个外向树上用堆贪心求出最小拓扑序列即可。
复杂度