如何求解按位不等式:在[L,R]区间内查找满足异或比较条件的整数M
核心判定原理
对任意两个非负整数A、B,A⊕B < A 的充要条件为:B的最高有效位对应的二进制位,在A的表示中是1。
推导逻辑非常直接:
- 数B的最高有效位,是其二进制表示中最靠左的1所在的位置(记为第m位,对应权重
2^m),所有比m更高的二进制位上B的值都是0。 - 对比
A和A⊕B的大小时,比m更高的位上,异或结果和A本身完全一致(B在这些位都是0,异或0不会改变原值),因此整体的大小差异完全由第m位决定:- 如果A的第m位是1,异或后这一位变为0,最终的异或结果必然小于A;
- 如果A的第m位是0,异或后这一位变为1,最终的异或结果必然大于A。
具体定位步骤
套用到题目场景,A就是预先计算得到的区间异或和XR,B就是要找的M,全程O(1)复杂度,完全适配1e16的规模限制:
- 按已有方法计算区间
[L,R]的连续异或结果XR。 - 提取XR的所有二进制置位位(即所有满足
XR & (1 << m) !=0的位置m)。 - 对每个置位位m,判断区间
[L,R],和「最高有效位为m的所有数组成的区间[2^m, 2^(m+1)-1]」是否存在交集:- 两个区间有交集的判定条件为:
L <= 2^(m+1)-1且2^m <= R。 - 只要找到任意一个满足条件的m,交集中的任意数就是符合要求的M,直接取
M = max(L, 2^m)即可,这个值必然落在[L,R]范围内,且满足不等式要求。
- 两个区间有交集的判定条件为:
- 如果遍历完XR的所有置位位,都没有找到存在交集的情况,说明不存在符合条件的M。
注意:因为L、R最大到1e16,计算
2^m、2^(m+1)-1时必须使用64位整数类型存储,避免移位溢出。
场景验证
- 当XR=0时,没有任何置位位,直接判定不存在符合条件的M:此时不等式为
0⊕M <0,等价于M<0,与题目中M≥1的约束矛盾。 - 反例:取L=2、R=3,计算XR=2⊕3=1,置位位只有m=0,对应区间
[1,1],和[2,3]无交集,因此不存在M。实际计算两个候选值:1⊕2=3>1,1⊕3=2>1,与结论一致。 - 正例:取L=3、R=5,计算XR=3⊕4⊕5=2,置位位为m=1,对应区间
[2,3],和[3,5]的交集为3,取M=3,计算得2⊕3=1<2,完全符合要求。
内容的提问来源于stack exchange,提问作者Mehedi
相关产品推荐
相关产品推荐

