给n个数,每个数的二进制位都可以调换位置,问满足区间[l,r] xor和为0的区间对数。
$(n\le 3·10^5, 1\le a_i\le 10^{18})$
题解
- 因为1的位置可以互相换,xor每次可以消掉2个1,故要满足区间二进制1的个数为偶数个并且二进制为1最多的一个数不能超过所有的一半
- 问题转化为知道每个值的二进制位数和奇偶性,如何算对数
- 因为$ 1\le a_i\le 10^{18}$,所以暴力算128位,剩下的直接算即可
- 注意左端点要标注
代码
1 |
|
Success and failure are temporary.
给n个数,每个数的二进制位都可以调换位置,问满足区间[l,r] xor和为0的区间对数。
$(n\le 3·10^5, 1\le a_i\le 10^{18})$
1 | #include<bits/stdc++.h> |