Counting Inversions, Offline Orthogonal Range Counting, and Related Problems [chapter]

Timothy M. Chan, Mihai Pătraşcu
2010 Proceedings of the Twenty-First Annual ACM-SIAM Symposium on Discrete Algorithms  
We give an O(n √ lg n)-time algorithm for counting the number of inversions in a permutation on n elements. This improves a long-standing previous bound of O(n lg n/ lg lg n) that followed from Dietz's data structure [WADS'89], and answers a question of Andersson and Petersson [SODA'95]. As Dietz's result is known to be optimal for the related dynamic rank problem, our result demonstrates a significant improvement in the offline setting. Our new technique is quite simple: we perform a "vertical
more » ... partitioning" of a trie (akin to van Emde Boas trees), and use ideas from external memory. However, the technique finds numerous applications: for example, we obtain • in d dimensions, an algorithm to answer n offline orthogonal range counting queries in time O(n lg d−2+1/d n); • an improved construction time for online data structures for orthogonal range counting; • an improved update time for the partial sums problem; • faster Word RAM algorithms for finding the maximum depth in an arrangement of axis-aligned rectangles, and for the slope selection problem. As a bonus, we also give a simple (1 + ε)-approximation algorithm for counting inversions that runs in linear time, improving the previous O(n lg lg n) bound Theorem 3.5. There exists a data structure for dynamic rank supporting updates in O(lg 0.5+ε n) time and queries in O(lg n/ lg lg n) time. Proof. This proceeds by reduction to partial sums. We recall the ordered file data structure of [DS87, BCD + 02].
doi:10.1137/1.9781611973075.15 dblp:conf/soda/ChanP10 fatcat:z4dmkj5aubda7l3g7irqkjbxqi