问题
我有一个包含 N 个数字的数组。这些数字可能是不同的,也可能是无序的。我必须回答关于 A 和 B 之间有多少不同数字的 Q 查询。其中 A、B 是 0 <= A <= B < array.Length 之间的索引。
我知道如何通过使用 HashTable 来完成每个查询的 O(N),但我要求更有效的解决方案。我试图通过 sqrt 分解和分段树来改进它,但我做不到。我没有显示任何代码,因为我没有找到任何可行的想法。我正在找人解释更快的解决方案。
更新
我读到您可以收集查询,然后使用二进制索引树 (BIT) 来回答所有问题。有人可以解释如何做到这一点。假设我知道 BIT 是如何工作的。