https://www.acmicpc.net/problem/2042
2042번: 구간 합 구하기
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄
www.acmicpc.net
import sys
input = sys.stdin.readline
n, m, k = map(int, input().split())
num_list = [0] * (n+1)
tree = [0] * (n+1)
def update_tree(idx, dif):
while idx <= n:
tree[idx] += dif
idx += idx & -idx
def prefix_sum(idx):
result = 0
while idx > 0:
result += tree[idx]
idx -= idx & -idx
return result
for i in range(n):
tmp = int(input().strip())
dif = tmp - num_list[i+1]
num_list[i+1] = tmp
update_tree(i+1, dif)
for _ in range(m+k):
a, b, c = map(int, input().split())
if a == 1:
dif = c - num_list[b]
num_list[b] = c
update_tree(b, dif)
else:
print(prefix_sum(c) - prefix_sum(b-1))
참고
https://www.acmicpc.net/blog/view/21
펜윅 트리 (바이너리 인덱스 트리)
블로그: 세그먼트 트리 (Segment Tree) 에서 풀어본 문제를 Fenwick Tree를 이용해서 풀어보겠습니다. Fenwick Tree는 Binary Indexed Tree라고도 하며, 줄여서 BIT라고 합니다. Fenwick Tree를 구현하려면, 어떤 수 X
www.acmicpc.net
'코딩테스트 준비 > [백준]' 카테고리의 다른 글
[백준] 11657 벨만포드 - 파이썬 (0) | 2021.12.19 |
---|---|
[백준] LCA(Lowest Common Ancestor) 11437 최소 공통 조상 (0) | 2021.12.18 |
알고리즘 문제 링크 (0) | 2021.10.28 |
삼성 A형 링크 (0) | 2021.10.28 |
[백준] 2343 (0) | 2021.07.23 |