μμλ€μ λμ λ ν©. μ΄λ ν λ°°μ΄μ κΈ°λ°μΌλ‘ μμμλΆν° μμλ€μ λμ λ ν©μ μ μ₯ν΄ μλ‘μ΄ λ°°μ΄μ λ§λ€μ΄μ(PSum) μ΄λ₯Ό νμ©νλ κ²μ μλ―Έ (↔ Suffix Sum λ€μμλΆν° λν¨)
- PSum[n] μλ λ°°μ΄μ nλ²μ§Έ μΈλ±μ€μ κ°κΉμ§ ν©ν κ°μ΄ λ€μ΄κ°
- λμ ν© λ°°μ΄μ λ§λ€ λλ 0λ² indexλ₯Ό λΉμ°κ³ 1λ²λΆν° κ°μ λ°λ κ² νΈνλ€.
νμ© λ°©λ²
ꡬκ°μΏΌλ¦¬ μ€ λ°°μ΄μ μμκ° λ³νμ§ μλ μ μ λ°°μ΄μμ ꡬκ°μ ν©μ ꡬνλ λ° μ¬μ©ν¨
nκ°μ μ«μκ° μκ³ ν©μ ꡬν΄μΌν ꡬκ°μ΄ mκ° μ£Όμ΄μ§ λ, λ§€λ² λνλ κ² μλλΌ λμ ν© λ°°μ΄μ ꡬν΄λκ³ λ§μ΄λμ€ μ°μ°μΌλ‘ κ°μ ꡬν¨
ex: [3,5] ꡬκ°μ ν© → PSum[5] - PSum[2]
- μκ°λ³΅μ‘λ: O(n*n) → O(n) *λ°λ³΅λ¬ΈμΌλ‘ λ§€λ² κ΅¬νλ©΄ O(n*n) μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€.
- ꡬκ°μΏΌλ¦¬ μ€ λμ λ°°μ΄ λ¬Έμ λ νμ νΈλ¦¬(Fenwick Tree)λ₯Ό νμ©ν΄ ꡬν΄μΌνλ€.
μμ
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
num_list = list(map(int, input().split()))
# λμ ν© κ΅¬νκΈ°
prefix_sum_list = [0] * (n+1)
for index, num in enumerate(num_list):
prefix_sum_list[index + 1] = prefix_sum_list[index] + num_list[index]
for _ in range(m):
i, j = map(int, input().split())
print(prefix_sum_list[j]-prefix_sum_list[i-1])
μ°Έκ³
https://www.youtube.com/watch?v=906Kko5nZhE
'μκ³ λ¦¬μ¦ > κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λͺ¨λλ¬ μ°μ° (0) | 2024.04.20 |
---|