题解:AT_abc381_e [ABC381E] E - 11/22 Subsequence

首先能够想到枚举所有的 /,对于每个 / 计算以它为中间字符时能够产生的最大答案。对于当前询问的区间 (l,r),设 pos 表示当前这个 / 的位置。如果令 s1 表示区间 [l,pos]1 的数量,s2 表示区间 [pos,r]2 的数量,那么此时的答案显然就是 min(s1,s2)+1。其中 s1s2 可以用前缀和维护。

但是直接枚举肯定是不行的。我们不妨感性理解一下,作为断点字符的 / 一定要尽可能靠近中间,于是不难想到二分。

具体的,我们预处理所有 / 的位置,每次先二分找到所有在当前询问范围内的 / 位置区间,设这个区间为 [L,R]。然后在这个集合内二分找到最优的 / 的位置。

check 的时候,我们对于当前的 mid,找到区间 [L,mid]1 的数量 sum1,区间 [mid,R]2 的数量 sum2,那么如果 sum1sum2,就收缩左端点,否则收缩右端点。

二分的收缩,边界等细节其实不用过多考虑。对于我来说,最后可以把最优位置所在的区间收缩到一个大概不超过 10 的范围,在这个范围里全部重新计算贡献,就可以不用考虑边界问题,足以通过本题。

提交记录

posted @   Redamancy_Lydic  阅读(117)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示