CF1392G 题解

blog。妈的,第一步就没想到。不过是好题!


肯定是考虑将区间拆成 O(1) 个前后缀结构去维护。赛时一直在想前缀,发现做不了。。。

但是考虑后缀就是对的,具体就是注意到若同时给 S,T 进行操作,那么位置数量不变,于是将 [l,r] 拆成 S 上操作 [l,n] 操作、T 上操作 [r+1,n] 操作,这样后面的部分就被抵消了,然后就拆成区间了。

后面都比较套路了。记 fi,gi 分别表示 S,T 操作 [i,n] 操作后形成的字符串状态。这个可以记录每个元素具体跑到了哪里去,O(N) 直接求出。

此时答案即为

kmin1lrn+1,rlmpopcount(flgr)

发现两串的 popcount 恒不变,手玩一下发现答案也可以描述为

kpopcount(S)popcount(T)+2×max1lrn+1,rlmpopcount(flgr)

转换视角,枚举 st=flgr,对每个 st 记录 stfl 的最小的 lstgr 的最大的 r。这个可以高维后缀和求出。然后直接 check 每个 st 是否合法并统计答案即可,这一部分是 O(k2k) 的。

总复杂度 O(n+k2k)code

posted @   liangbowen  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示