异或序列

Solution

非常板的一道题。

看到区间异或和就能想到转换为前缀异或,即

\[\sum_{i=1}^n \sum_{j=0}^{i-1} s_i \oplus s_j \]

又想到位运算各位之间互不干涉,所以想到按位来考虑。以其中一位为例,能构成一个 01 序列,对它做前缀异或后,记为 \(b_i\)。那么 \(b_i\) 的贡献就是

\[\sum_{j=0}^{i-1} [b_j\oplus b_i=1] \]

所以只需要统计前缀 0 和 1 的个数,随便更新一下答案就可以了。

posted @ 2021-03-13 10:56  Kreap  阅读(124)  评论(0编辑  收藏  举报