第一次学习 bitsetbitsetbitset 里面的数整体左移 xxx 位即可,超过的部分我们直接用 bitsetbitsetbitset 的长度作为限制自然溢出即可,就相当取模。
考虑一个区间加法该怎么维护,我们发现我们可以对于区间加的值取模后控制在 2m2m2m 之内,那么现在一个区间的 bitset 左移后后面的 x 位需要和前面的 2m−x2m−x2m−x 位进行一个整体交换,这个就 O(nw)O(nw)O(nw) 单次暴力做就好了。单次下传和单次修改都是 O(wn)O(wn)O(wn) 所以最后修改和下传的总时间复杂度就是 O(q∗logn∗2m/w)O(q*logn*2^m/w)O(q∗logn∗2m/w)。
然后区间查询就直接找到 lognlog nlogn 个线段树对应的区间节点后把对应的每一位直接按位异或起来即可,单次合并一个区间节点的时间复杂度也是 O(nw)O(nw)O(nw) 最后查询总的时间复杂度就是 O(q∗logn∗2m/w)O(q*logn*2^m/w)O(q∗logn∗2m/w)。
最后总的时间复杂度是 O(q∗logn∗2m/w)O(q*logn*2^m/w)O(q∗logn∗2m/w) 大约 O(q∗log2n)O(q*log^2n)O(q∗log2n) 的样子可以通过此题。
1040

被折叠的 条评论
为什么被折叠?



