【发布时间】:2017-12-17 22:55:50
【问题描述】:
我刚刚遇到一个这样的问题
给定一个包含 n 个元素的数组,有 m 个类型为 l,r,t 的查询,其中程序中必须取出所有小于 t 且位于索引 l,r 之间的数字的异或(包含和 0 索引)。
示例: 说 arr={2,3,5,1} 我们的查询是:0 2 4 输出 1
我只能想到简单的解决方案,即遍历范围并仅对所有小于 t 的数字进行异或运算,但我只是想知道是否有任何数据结构(如段树)可以有效地完成任务?
【问题讨论】:
-
是的。我认为 Segment tree 可以在这里工作。您可以参考此链接以获取有关类似问题的更多信息。它对 l,r 范围内的元素进行异或运算。我认为您的问题是同一问题的延伸。 geeksforgeeks.org/segment-tree-set-3-xor-given-range
-
不知道你是否注意到,但我需要小于 t 的所有元素的异或
-
是的。我认为我们可以在我提到的链接中应用
t约束。我不确定,因为我仍在尝试使用您提到的t约束来做到这一点。会告诉你它是否真的可行。 -
这个问题在过去几天出现过。绝对是在线比赛或家庭作业。
标签: data-structures xor xor-linkedlist