一系列数字的Xor

时间:2017-07-13 08:54:37

标签: data-structures xor xor-linkedlist

我刚刚遇到了一个像这样的问题

给定n个元素的数组,有m个类型为l,r,t的查询,其中程序必须取出小于t的所有数字的xor和索引l,r(包括0和0索引)之间的xor。

示例: 说 ARR = {2,3,5,1} 我们的查询是:0 2 4 输出1

我只能想到通过该范围的天真解决方案,并且只考虑所有小于t的数字的xor但我只是想知道是否有任何数据结构如段树可以有效地完成任务?

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

  1. 使用索引保存所有数字,并根据它们的值对它们进行排序(让我们将其称为数组a)。

  2. 首先保存所有带有查询ID的查询,然后根据t对它们进行排序(我们称之为数组q)。

  3. 默认情况下,获取每个节点包含0的段树。它是一个包含范围内xor的分段树。

  4. 迭代q并在段树中添加所有小于t的数字,并在每个查询的给定查询范围内取xor并使用查询ID将其保存到数组中(let's所有它ans)。

  5. 打印ans数组。

  6. 此解决方案的复杂性为O(n log(n)+ m log(n))。