We consider the following problem: Given an unsorted array of n elements, and a sequence of intervals in the array, compute the median in each of the subarrays defined by the intervals. We describe a simple algorithm which needs O(nlog k + klog n) time to answer k such median queries. This improves previous algorithms by a logarithmic factor and matches a comparison lower bound for k=O(n). The space complexity of our simple algorithm is O(nlog n) in the pointer-machine model, and O(n) in the RAM model. In the latter model, a more involved O(n) space data structure can be constructed in O(nlog n) time where the time per query is reduced to O(log n / log log n). We also give efficient dynamic variants of both data structures, achieving O(log2 n) query time using O(nlog n) space in the comparison model and O((log n/loglog n)2) query time using O(nlog n/log log n) space in the RAM model, and show that in the cell-probe model, any data structure which supports updates in O(logO(1)n) time must have Ω(log n/loglog n) query time. Our approach naturally generalizes to higher-dimensional range median problems, where element positions and query ranges are multidimensional - it reduces a range median query to a logarithmic number of range counting queries.
Theoretical Computer Science, 2011, Vol 412, Issue 24, p. 2588-2601
Medians; Range queries; Algorithms; Data structures