Data Structures19 sections · 729 units
Open in Course

Range Sum I - Implementation

Complete solution

Here's the complete solution:

function solve(arr, queries)
    n := length of arr
    B := floor(sqrt(n)) + 1
    numBlocks := (n + B - 1) / B
    blockSum := array of size numBlocks, initialized to 0

    // Build block sums
    for i from 0 to n - 1
        blockSum[floor(i / B)] := blockSum[floor(i / B)] + arr[i]

    for each query in queries
        if query is update(i, v) then
            pointUpdate(i, v, arr, blockSum, B)
        else // query is sum(l, r)
            print rangeSum(l, r, arr, blockSum, B)

Time: O(n+qn)O(n + q\sqrt{n}). Space: O(n+n)O(n + \sqrt{n}).