loj2839
除了 L 神 txdy 我还能说啥呢。(L 神把这题搬模拟赛了。。。)
即把每个 x
换成 (
或 )
,问是否能通过不多于一次区间反转((
与 )
交换)后合法。
考虑怎样的括号串是合法的。
假设左括号为 ,右括号为 ,标号 。
我们设 ,则一个串合法当且仅当
容易发现只要 不同则不同,我们构造了一个 和括号串的双射。(折线法!)
现在再考虑反转操作。
假设反转 。
则
化简代换一下,也即
考虑到直接 dp 可能会计重(合法的 不唯一),考虑如何避免计重。
一般来说,避免计重可以通过对条件的贪心化实现,也即对每种方案确定某种最优的 对。
假设 间最大 为 ,容易发现 。
考虑对 分类讨论。
当 时,假设存在 ,取 总是不妨最优(顺带一提,);也即 。并且总是取最后一个可能的 ,因此下次枚举到一个 时要查看 区间内有无 ,倘没有则总是不得转移。可以证明这样的 总是最优且唯一。
区间合法遇到 时,我们总应使区间内最大数在 间,且存在 。
由于可能会有另一个合法的 在当前 后,考虑如何避免:考虑强制令到下一次出现 之前有某个 ,或一直到 均无另一个 则可行,否则不可行。容易发现不会漏统计情况,也不会计重。
第二类情况的计算可以考虑倒推,记录当前 和目前最大 ,可以 预处理。
对于第一类情况,即考虑枚举下次出现 的时间来计算方案数,这个可以倒推预处理。通过预处理从 到 ,保持 ,当前 为某值的方案数,以及进一步到 ,其间所有 ,直至开头为某数的方案数,来暴力计算。这是 的,并且很难优化。
考虑到这么做复杂度不优,我们略做修改,不枚举 ,而是对区间内最大值容斥,枚举何时出现超过最大值边界的元素,这样此前所有可能的 均可以出现,从而无需对 端点去重。特别地,如果到终点均未出现超过边界的元素,这类贡献我们还是用先前第二类预处理的方式计算。
这样会好写一点,并且避免了复杂度不优的问题。
对于 恒成立的情况,我们考虑另写一个 dp 判断。
类似于刚刚的 dp,但是区间内不能出现与 相等的数。
考虑设 为最大的满足 的数,则取 为最大的满足 即可。
只用计算这样的合法方案数即可,与上面过程是类似的。
只用找一个 满足 ,且 即可。显然这样的 越大越好,因此区间内不能有和目前 一样大的数,也即所有数均大于 。
容易发现把前面的 dp 过程中未出现负数的方案也用来计算答案即可。
但是这样会算重,所以观察性质,容易发现某些情况的充要条件是 ,然后就完了。
这样我们就讨论完了 的情况。
而 和 就差一个全局翻转,翻过来一样做即可。
考虑 ,这个的合法条件是什么?
如果 恒成立,显然总可行。
否则,我们设 是第一个 , 是最后一个 ,则合法等价于
于是同样 dp 即可。
总复杂度容易做到 。
重新理一遍。
先考虑 的情况的答案。
由于刚刚的过程过于抽象,我们用 dp 方程来描述这一做法。
对于 ,我们认为其 在过程中既可以为 ,也可以为 ,相当于是做两轮转移。
设 为已考虑前 项,其 均成立,且 的方案数。
显然有( 表示 dp 的贡献转移方向,不是赋值)
同样的,设 为已考虑 项,其 均成立,且 的方案数。
我们类似地维护后缀、后缀最大值的 dp,方法类似。
假设 为已考虑 项,,,区间内是否已出现负数。
计算两遍,第一遍要求 ,第二遍要求 。
遇到 或者 的元素可以直接计算对答案的贡献,注意特判 。
然后分类计算贡献即可。dp 不予列出。
同理。
的部分,分类左侧小还是右侧小,分别写一遍即可。
虽然但是,L 神 txdy!
代码写了 13k。。。
本文来自博客园,作者:myee,转载请注明原文链接:https://www.cnblogs.com/myee/p/loj2839.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫