%你赛T2 query

题意

多组询问 \(l,r\)
求:

\[\oplus_{l\le i \le j \le r} (a_i + a_j) \]

\(n,q\le 2\times10^5\)

转化

显然加法做不了,那么我就去思考加法和异或之间的联系。
我们知道异或是没进位的加法,也就是说:

\[a+b=a\oplus b\, \oplus c \]

其中 \(c\) 是进位部分的异或和。
如:

\[\begin{array}{r r r r} & & 1 & 1 \\ + & 1 & 1 & 1 \\ \hline 1 & 0 & 1 & 0 \end{array} \]

则 \(c=2^1+2^2+2^3=14\)
如:

\[2+3=2\oplus 3\oplus 4 \]

?

正常来说,到这里思路就应该豁然开朗了。
但我居然就完全不知道怎么去找进位...
实际上进位有一个非常著名的技巧使得进位可以按位处理。
比如要去找二进制下第 \(i\) 位的进位,那么可以考虑每个数 \(\mod 2^i\) 后进行加法,如果和 \(\ge 2^i\) 则有进位。
然后无非是一些双指针(暴力),树状数组(莫队)。
当然还需要一些 \(bitset\) 优化等。
但主要的思维量就是这些。

posted @ 2026-10-06 20:59  wlhao  阅读(9)  评论(0)    收藏  举报