CF242E题解
题意:
给你一个数列 \(a\) ,你需要满足以下两个操作。
- 求 \(\sum_{i=l}^r a_i\) 。
- 将 \(a_l\sim a_r\) 全部异或 \(x\) 。
看到第一个操作,明显想到线段树。
而且线段树是支持一位二进制取反的(见这个题)。所以我们考虑建 \(\log a_i\) 棵线段树,第 \(k\) 棵树维护当前数列的第 \(k\) 位二进制。那操作一就是把所有线段树跑一遍区间求和,操作二就是把所有 \(x\) 是 \(1\) 的二进制位所对应的那些线段树做区间取反。两个操作时间复杂度都是 \(O(n\log^2 n)\) 的。