P13687 【MX-X16-T5】「DLESS-3」XOR and Rockets
考虑分两种情况,一种是值域不会超过 \(a_n\),一种是值域任意大。
你思考为啥不能直接做后面的情况,因为如果 \(b_n\) 是 inf 你就跪下了。
很容易将问题从前缀变为取连续段异或,因此第一部分用个 DP 就做完了。
考虑第二部分,既然值域都任意大了,那么此时相邻连续段不必满足大小关系,问题变为判断一个连续段能否被生成成单调不降,对于两个数 \(a, b\),若想使得 \(a \oplus x \le b \oplus x\),那么考虑最高的不同位即可,因为异或完之后这一位的值仍然不同,必须满足异或完后 \(a\) 这一位是 \(0\),\(b\) 这一位是 \(1\),容易发现这就是充要条件,DP 即可。事实上因为这东西有单调性,这一部分可以做到近线性。

浙公网安备 33010602011771号