问题:有一个长度为\(n\)的数组,有\(m\)个连续区间\(xor\)的值,每个数至少在\(m\)个区间中出现一次,问这个数组所有子序列的\(xor\)的和为多少?
思路:所有的\(xor\)的值进行与运算就是整个数组的所有元素的\(xor\)值,假设为\(x\),\(x\)的二进制中所有为\(1\)的位置为\(i\)的地方都会产生$qmi(2, i,mod) * qmi(2, n - 1, mod) $ \(\%\) \(mod\)的贡献。
代码:
void solve()
{
LL ans = 0;
cin >> n >> m;
for(int i = 1; i <= m; i ++ ){
cin >> l >> r >> x;
ans |= x;
}
string s = binary(ans);
LL qwq = 0;
// debug(ans);
for(int i = 0; i < sz(s); i ++ ){
qwq = (qwq + (s[i] - '0') * qmi(2, i, mod) * qmi(2, n - 1, mod)) % mod;
}
cout << qwq << endl;
}