【セグメントツリー】
セグメントツリー とは?
💡 「この範囲の合計は?」に一瞬で答える区間クエリの達人
📌 このページのポイント
セグメントツリーって普通の配列と何が違うの?
どうやってツリーにまとめるの?
配列の各要素を葉ノードにして、親ノードに「子2つの合計」や「子2つの最小値」を持たせるんだ。根に近いほど広い区間をカバーしていて、必要な区間だけをたどれば答えが出るよ
値が変わったらツリー全体を作り直すの?
いや、変わった要素から根までのパスだけ更新すればいい。木の高さはlog nだから、更新もO(log n)で済むんだ。これが配列を毎回再計算するより圧倒的に速いポイントだよ
遅延伝播っていうのも聞いたことあるけど…
「3番目から100番目まで全部+5して」みたいな区間一括更新のとき、全ノードを即座に更新せず「あとで反映するメモ」を残しておくテクニックだよ。必要なときだけメモを解消するから、区間更新もO(log n)で処理できるんだ
実際どんな場面で使われるの?
📖 おまけ:英語の意味
「Segment Tree」 = 区間木
💬 Segment(区間・部分)とTree(木)で、区間ごとの情報を木構造にまとめたものだよ