백준 2042번. 구간 합 구하기에 대한 풀이를 Fenwick Tree의 스니펫 느낌으로 작성.
arr
: [0, 1, 2, 3, 4, 5] (1-indexed) 일 때, fenwick_tree
: [0, 1, 3, 3, 10, 5]import sys
input = lambda: sys.stdin.readline().rstrip()
################################################
def update(i, diff):
while i <= N:
fenwick_tree[i] += diff
i += (i & -i)
def interval_sum(start, end):
def prefix_sum(i): # [1~i]의 합
ret = 0
while i > 0:
ret += fenwick_tree[i]
i -= (i & -i)
return ret
return prefix_sum(end) - prefix_sum(start-1)
################################################
N, M, K = map(int, input().split())
fenwick_tree = [0] * (N+1) # 1-indexed 여야 함. 0 & 0을 할 수는 없으니까.
arr = [0] * (N+1)
for i in range(1, N+1):
x = int(input())
arr[i] = x
update(i, x)
for i in range(M+K):
a, b, c = map(int, input().split())
if a == 1:
update(b, c-arr[b])
arr[b] = c
else:
print(interval_sum(b, c))