https://codeforces.com/contest/1863/problem/F
- 因为有等于,所以考虑异或和为0的合法区间,它可以随意切
- 现在考虑切开后左边大于右边,可以发现左右边最高位可以互相抵消,似乎不太可做?
- 此时可以换个考虑,考虑大区间的异或和的最高位,这一位在左右两个区间恰好有一位为1,而为1的那个区间就是转移到的区间
- 然后考虑下图,对于
[
i
:
j
]
[i:j]
[i:j],可以转移到的要么以
i
i
i 开头,要么以
j
j
j 结尾。所以其实只需要判断
i
i
i 开头和
j
j
j 结尾的更大区间是否存在一个合法区间满足最高位恰好存在于当前这个区间里面。代码就是:
if((l[i]|r[j])&nx)