Data Structures19 sections · 729 units
Open in Course

Count Range Sum Approach

Prefix sums + segment tree

Core idea: range sum S(i,j)=prefix[j+1]prefix[i]S(i, j) = \text{prefix}[j+1] - \text{prefix}[i].

You want to count pairs (i,j)(i, j) where lowerprefix[j+1]prefix[i]upper\text{lower} \leq \text{prefix}[j+1] - \text{prefix}[i] \leq \text{upper}.

Rearranging: prefix[j+1]upperprefix[i]prefix[j+1]lower\text{prefix}[j+1] - \text{upper} \leq \text{prefix}[i] \leq \text{prefix}[j+1] - \text{lower}. Algorithm:

1.1. Compute all prefix sums

2.2. Coordinate compress prefix values

3.3. Iterate through prefix sums; for each, query how many previous prefix sums fall in the valid range

4.4. Add current prefix sum to segment tree You're solving a classic "count inversions" variant using segment tree. Time: O(nlogn)O(n \log n). Space: O(n)O(n).