Loading

关于区间异或分布问题的一点思考

若该类问题有下限,我们一律通过容斥将其转化为下限为 \(0\) 的情况。

我们先思考这么一个问题,对于两个数 \(x \in [0, 2^{k_1}), y \in [0, 2^{k_2})\),那么 \(x \oplus y\) 的结果分布将是怎么样的。

比较符合直觉的理论是 \(x \oplus y\)\([0, \max(2^{k_1}, 2^{k_2}))\) 内均匀分布,这是因为 \(x\) 取到的任意位(以下称自由元)为第 \(0 \sim k_1\) 位,\(y\) 取到的自由元为第 \(0 \sim k_2\) 位,更高自由元位能够覆盖更低的自由元位,具体来说可以构造双射使结果一一对应,这里不再解释。

那么如果变成非二次幂,那么此时结果就不能够用简单的自由元位的概念来解决了,但是我们可以进行一些拆位操作,比如按照 \(lim + 1\) 二进制分界拆成一段段区间,此时每一段区间都满足低位若干位可以任取,高位始终固定,这样我们仍然可以利用自由元的概念去解决这个问题,也就是对于两两这样的区间,异或起来的结果是均匀分布的,更高的自由元仍然会覆盖更低的自由元使其可以任取,而更高的不变的位就两两异或起来。

由于每个数可以被拆分为 \(\log V\) 个区间,所以这样子单次复杂度为 \(O(\log^2 V)\),又因为显然此时结果区间仍然只有 \(\log V\) 个,所以可以继续这个过程,那么如果有 \(n\) 个数便可以做到 \(O(n \log^2 V)\) 的复杂度。

而 DP 的做法是,我从高往低枚举此时哪个才是最高的自由元位,看每一位取到上界的数是奇数个还是偶数个,更高的固定的位仍然直接异或起来,对每一位 DP 这个过程,应用如上同样的理论,可以做到 \(O(n \log V)\),但貌似对于异或值为 \(0\) 的情况下才比较好算,其它情况就比较复杂了。

posted @ 2026-01-09 14:13  Alexande  阅读(2)  评论(0)    收藏  举报