我正在寻找实现一种算法,该算法给出一个整数数组和该数组中的范围(间隔)列表,返回每个间隔中不同元素的数量。也就是说,给定数组 A 和范围 [i,j] 返回集合 {A[i],A[i+1],...,A[j]} 的大小。
显然,天真的方法(从 i 迭代到 j 并计算忽略重复项)太慢了。Range-Sum 似乎不适用,因为 AUB - B 并不总是等于 B。
我在 Wikipedia 中查找了 Range Queries,它暗示 Yao(在 82 年)展示了一种算法,该算法对半群运算符(似乎是联合)执行此操作,具有线性预处理时间和空间以及几乎恒定的查询时间。不幸的是,这篇文章不能免费获得。
编辑:看来这个确切的问题可以在http://www.spoj.com/problems/DQUERY/