본문 바로가기

코딩테스트 준비/[백준]

[백준] 2042 - 구간 합 구하기 / 바이너리 인덱스 트리

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