algorithm - 使用 BIT 或 Fenwick 树的范围异或求和

标签 algorithm xor fenwick-tree binary-indexed-tree

对于给定的整数数组,我们必须通过XORed 和来计算给定范围[L, R] 内的XORed 和我的意思是 Σ(Arr[i]^p) 其中 i:[L,R]p 是一些数字。这可以很容易地完成,同时计算 XORed 总和,直到数组中从数组开头开始的每个 i-th 元素。现在问题发生在 p 变化非常频繁的时候。在这种情况下,重新计算 XORed 和直到每个 i-th 元素似乎不是理想的解决方案。我想这可以使用 fenwick treeBIT 来完成。但我不知道如何继续使用 fenwick 树或 BIT。任何帮助,将不胜感激。

最佳答案

我们可以独立解决每个位的问题。

假设我们要计算第 k 位对答案的贡献。如果在p中设置,则答案是该位值为零的范围内元素的数量(否则,它是一样的,但对于该位等于一的元素) .

如何有效地统计此类元素的数量?我们可以为每一位构建一个前缀和数组。这样,我们就可以在恒定时间内获得某个范围内具有或不具有给定位的元素的数量。

关于algorithm - 使用 BIT 或 Fenwick 树的范围异或求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913571/

相关文章:

algorithm - 是否可以在 O(n) 中构建 Fenwick 树?

c++ - 使用二叉索引树的字符串查询

python-3.x - python3中未加权无向图中最短P算法的运行时间

c - 如何在C中对内存中的字节进行异或?

c - 如何使用相同的函数对 C 中的字符串进行 XOR 加扰并再次加扰?

arrays - 在 XOR 序列上最大化 AND

algorithm - 使用二进制索引树(Fenwick 树)解决范围最小查询

c++ - GridWalk CodeEval 实现问题

c - 在链表中查找两个最小元素

c++ - 两次递归调用的递归算法的时间复杂度