§ Desc.
给出一个括号序列, 在一次操作中, 你可以:
- 选择一对匹配的括号, 将他们从原序列中删去.
请你规划每次操作, 使得若干次操作后得到的序列字典序最小.
§ Sol.
结论: 如果删除了 , 那么 一定被删除了.
证明考虑对 分类讨论即可.
设 表示从 出发的最近合法括号序列的右端点, 表示考虑 的答案. 转移有
直接 DP 由于值域的处理需要 的时间, 所以是 的. 考虑用数据结构处理, 就是要支持如下的问题:
给定一个字符串, 支持
新增版本, 并在旧版本字符串的前面添加一个字符;
比较版本 的字典序大小.
其中比较操作可以转化为求 LCP (Longest Common Prefix). 求解 LCP 的一个常见方式是二分 + Hash. 然而这样我们需要维护一个字符串的所有前缀 Hash 值, 显然不如直接比较. 我们是否可以不维护所有前缀呢? 当然可以, 我们仅存储 表示字符串 前 位的 Hash 值即可. 那么二分就变成了倍增. 具体来说, 维护 第 位在原串中的位置和前缀 Hash 值即可.
/ 将 诗句通通掰碎 捡一双含情眉 /
/ 如何形容她?讽刺来得卑微 歌颂不够尖锐 /
/ 然后看向她 红唇正在颓废 墓志太过宏伟 /
/ 最后告别她 用尽言辞虚伪 发酵一滴眼泪 /
/ 再忘却 她是谁 /