📗 세그먼트 트리 배우기
길이가 $n$인 배열 $A$가 있을 때 $A_l + A_{l+1} + \dots + A_{r-1}+A_r$ 을 빠르게 구하고 싶다면 누적 합을 사용하면 된다. 누적 합 배열 $p$를 통해 $p_r - p_{l-1}$를 계산하여 $O(1)$만에 구간 합을 구할 수 있다.
<aside> ❓
그런데 만약 $A_i$ 의 값을 변경하면 어떻게 될까?
</aside>
변경 사항을 누적 합 배열에서 업데이트 하려면 $p_i,\ p_{i+1},\dots p_n$을 모두 업데이트 해야하기 때문에 $O(N)$이 걸린다.
세그먼트 트리를 사용하면 구간 합을 $O(logN)$, 값 업데이트를 $O(logN)$만에 할 수 있다.
구조는 다음과 같다.

값 업데이트는 업데이트 하려는 원소가 구간에 포함된 노드들을 모두 업데이트 한다.
구간 합은 노드들을 적절히 조합하여 원하는 구간을 만든다.