Core idea: range sum S(i,j)=prefix[j+1]−prefix[i].
You want to count pairs (i,j) where lower≤prefix[j+1]−prefix[i]≤upper.
Rearranging: prefix[j+1]−upper≤prefix[i]≤prefix[j+1]−lower. Algorithm:
1. Compute all prefix sums
2. Coordinate compress prefix values
3. Iterate through prefix sums; for each, query how many previous prefix sums fall in the valid range
4. Add current prefix sum to segment tree You're solving a classic "count inversions" variant using segment tree. Time: O(nlogn). Space: O(n).