Data structures 范围内数的异或

Data structures 范围内数的异或,data-structures,xor,xor-linkedlist,Data Structures,Xor,Xor Linkedlist,我刚刚遇到一个问题,是这样的 给定一个由n个元素组成的数组,有m个类型为l、r、t的查询,其中程序中必须取出索引l、r(包含索引和0索引)之间小于t的所有数字的xor 例如: 说 arr={2,3,5,1} 我们的查询是:024 产出1 我只能想到一个简单的解决方案,即遍历范围并对所有小于t的数字进行异或运算,但我只是想知道是否有任何数据结构(如段树)可以高效地完成任务?这里有一个解决方案: 将所有数字与其索引一起保存,并根据它们的值对它们进行排序(我们称之为数组a) 首先用查询id保存所有查询

我刚刚遇到一个问题,是这样的

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

例如: 说 arr={2,3,5,1} 我们的查询是:024 产出1

我只能想到一个简单的解决方案,即遍历范围并对所有小于t的数字进行异或运算,但我只是想知道是否有任何数据结构(如段树)可以高效地完成任务?

这里有一个解决方案:

  • 将所有数字与其索引一起保存,并根据它们的值对它们进行排序(我们称之为数组a)

  • 首先用查询id保存所有查询,并根据t对它们进行排序(我们称之为数组q)

  • 取一个段树,其中每个节点默认包含0。它是一个在范围内包含xor的段树

  • 对q进行迭代,并在段树中添加每个查询中小于t的a中的所有数字,并在给定的查询范围内获取xor,然后使用查询id将其保存到数组中(让我们全部使用ans)

  • 打印ans数组


  • 此解决方案的复杂性为O(nlog(n)+mlog(n))。

    是。我认为片段树可以在这里工作。有关类似问题的更多信息,请参阅此链接。它对l,r范围内的元素进行异或运算。我认为你的问题是同一问题的延伸。我不知道你是否注意到,但我需要所有元素的xor小于TYE。我想我们可以在我提到的链接中应用
    t
    约束。我不确定,因为我仍在尝试使用您提到的
    t
    约束。我会让你知道它是否可行。这个问题在过去几天的某个时候出现过。肯定是在线比赛或作业。