CF242E题解

题面

题意:
给你一个数列 \(a\) ,你需要满足以下两个操作。

  1. \(\sum_{i=l}^r a_i\)
  2. \(a_l\sim a_r\) 全部异或 \(x\)

看到第一个操作,明显想到线段树。
而且线段树是支持一位二进制取反的(见这个题)。所以我们考虑建 \(\log a_i\) 棵线段树,第 \(k\) 棵树维护当前数列的第 \(k\) 位二进制。那操作一就是把所有线段树跑一遍区间求和,操作二就是把所有 \(x\)\(1\) 的二进制位所对应的那些线段树做区间取反。两个操作时间复杂度都是 \(O(n\log^2 n)\) 的。

代码

posted @ 2022-04-26 19:40  1358id  阅读(34)  评论(0编辑  收藏  举报