일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Kotlin
- textfield
- architecture
- Compose
- 프로그래머스
- 백준
- Python
- TEST
- Codeforces
- GitHub
- Rxjava
- pandas
- activity
- Coroutines
- Hilt
- MyVoca
- 코루틴
- android
- boj
- AWS
- 코드포스
- livedata
- relay
- Gradle
- Coroutine
- 암호학
- ProGuard
- 쿠링
- androidStudio
- MiTweet
- Today
- Total
이동식 저장소
10999. 구간 합 구하기 2 본문
10999번: 구간 합 구하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄
www.acmicpc.net
2042번 구간 합 구하기 1에서는 수가 하나씩 바뀌므로 세그먼트 트리 또는 펜윅 트리를 이용하여 문제를 풀 수 있다.. 그런데 이 문제에서는
일반적으로 쿼리 문제에서는 쿼리를 로그 시간 안에 해결해야 한다. 그렇다면 구간 갱신을 로그 시간에 수행해야 한다는 뜻인데, 그게 가능할까?
가능하다
세그먼트 트리를 사용한다면 Lazy Propagation이라는 기법을 적용할 수 있다. 느린 전파라는 이름에서도 알 수 있듯이, 값을 매번 갱신하는 게 아니라 값을 새로 계산해야 할 때만 계산하는 알고리즘이다. Lazy Propagation을 적용하면 구간 업데이트를 로그 시간에 수행할 수 있다.
나는 펜윅 트리를 사용했는데, 펜윅 트리에서는 다른 알고리즘이 필요하다. 다음 블로그에 깔끔하게 설명돼 있다.
구간 업데이트와 구간 합이 모두 O(logN)에 가능한 펜윅트리 (Fenwick Tree Lazy Propagation)
(2019.08.11 수정) 요즘 이 글의 검색량이 많아져서 조금 수정을 했다. 일반 펜윅트리(Fenwick Tree)에 관한 설명은 어디에나 많이 찾아볼 수 있다. 오늘은 구간 업데이트(Range Update)와 구간 합(Range Sum)이
plzrun.tistory.com
구간 업데이트를 로그 시간에 수행할 수 있어서인지 Lazy Propagation of Fenwick Tree라는 이름으로 불리긴 하지만, 계산 과정은 전혀 다르다. 마치 구간합의 펜윅 트리를 구현하는 느낌.
아직 완벽히 이해하진 못했다. 문제를 더 풀어봐야 할 듯.

'Problem Solving > BOJ' 카테고리의 다른 글
19582. 200년간 폐관수련했더니 PS 최강자가 된 건에 대하여 (0) | 2022.11.23 |
---|---|
1311. 할 일 정하기 1 (1) | 2022.10.20 |
11562. 백양로 브레이크 (0) | 2022.10.04 |
2248. 이진수 찾기 (0) | 2022.09.18 |
17401. 일하는 세포 (0) | 2022.09.03 |