CF1327F AND Segments

CF1327F AND Segments

不难想到按位考虑,把每一位选到最后的答案乘起来。

可以发现,假如一段区间 and sum=x,对于第 i 位,假如 (x>>i)&1 ,那么这一段必须这一位都是 1,否则至少要有一个 0

那么我们先枚举第 wei 位,那么如何确定 ai 的第 wei 位是必须 1 还是?我们发现,这东西就是个区间覆盖+覆盖完查询,无脑差分即可。

做到这里我就不会了,因为我想到 dp,设 f[i][j] 为到第 i 个数字,上一个 0 的下标是 j

但不会转移。

我们考虑,对于每一个点 i,它的上一个 0 肯定不能乱选,且上一个 0 是单调不降的。

考虑 [l,r] 的操作这一位为 0,那么对于 r+1 来说,它上一个 0 可以选择 [l,r],那么至少就是 l

考虑记 pos[i] 表示 i 的上一个 0 至少在 pos[i] 处。

考虑转移 f,枚举 i,j

1. j<pos[i],f[i][j]=0

2. posj<i,f[i][j]=f[i1][j] 这里是因为这一段的假如 i0,那么上一个 0 应该是 i,所以只能填 1,从前面转移即可。

3. j=i,f[i][j]=k=pos[i]i1f[i1][k] 假如上一个就是它本身,显然当前就是 0

那么,这样会 TLE,怎么优化呢?

我们发现,实际上很多状态都是承接作用而已。干脆改下定义 f[i] 为匹配到第 i 个数字,上一个 0 的下标是 i,那么每一个按 3 转移即可。注意 pos 前面提到过单调不降,维护个清 0 指针维护操作 1。对于操作 2,因为定义改了,所以这一位不可能是 1。对于这一位强制必须 0 的情况,赋 0 即可。

要学到什么,对于二进制有关的题可以拆位看看,区间覆盖+全局查可以差分,状态太多无用可以考虑改定义。

  


__EOF__

本文作者F x o r G
本文链接https://www.cnblogs.com/xugangfan/p/15135585.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FxorG  阅读(57)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示