Data Structures19 sections · 729 units
Open in Course

Range Sum - Implementation

The code

Here's the range sum query:

function rangeSum(l, r, arr, blockSum, B)
    blockL := floor(l / B)
    blockR := floor(r / B)

    if blockL = blockR then
        // Same block - iterate directly
        sum := 0
        for i from l to r
            sum := sum + arr[i]
        return sum

    sum := 0
    // Left tail
    for i from l to (blockL + 1) * B - 1
        sum := sum + arr[i]

    // Complete blocks
    for b from blockL + 1 to blockR - 1
        sum := sum + blockSum[b]

    // Right tail
    for i from blockR * B to r
        sum := sum + arr[i]

    return sum

Time: O(n)O(\sqrt{n}). Space: O(n)O(\sqrt{n}) for block sums.