【题解】CF1592E Bored Bakry 位运算、前缀和

\(\text{and(l,r)}=a_l\&a_{l+1}...\&a_r\)\(\text{xor}(l,r)=a_l\text{xor}a_{l+1}...\text{xor}a_r\)

\(\text{highbit(x)}\)\(x\) 二进制下的最高位。

因为二进制下每一位的异或值取决于 \(1\) 的个数的奇偶性。

考虑 \(r-l+1\) (即区间长度)的奇偶性:

  • \(r-l+1\) 是奇数,那么一定有\(\text{xor}(l,r)\ge \text{and(l,r)}\) ,因为与结果的每一位 \(1\) ,异或意义下也一定是 \(1\)

  • \(r-l+1\) 是偶数,那么 \(\text{xor}(l,r)\) 的第 \(\text{highbit(and(l,r))}\) 一定是 \(0\) 。那么等价于 \([l,r]\) 中的所有数高于 \(\text{highbit(and(l,r))}\) 位的异或和是 \(0\)

(对于异或问题可以考虑奇偶性,但适可而止即可,应选用合适的思考角度。)

那么剩下的问题就很好解决了。

考虑 \(O(\log n)\) 的时间内枚举 \(\text{highbit(and(l,r))}\) ,那么每次 \(O(n)\) 做前缀异或和即可,总的时间复杂度为 \(O(n\log n)\)

posted @ 2021-10-04 14:20  Themaxmaxmax  阅读(42)  评论(0编辑  收藏  举报