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: . Space: .