Standard BIT: point update, prefix query.
What if you need: range update, point query?
Use a difference array with BIT! Let diff[i] = arr[i] - arr[i-1]. Then:
arr[i] = prefix(diff, i)— point query becomes prefix sum- To add to range : add to
diff[l], add todiff[r+1]
def rangeAdd(l, r, delta):
update(l, delta) # diff[l] += delta
update(r + 1, -delta) # diff[r+1] -= delta
def pointQuery(i):
return prefix(i) # sum of differences = arr[i]
You get range update and point query.