本文へスキップ
製品デスクトップツールTASTECAD図面の確認TASTEFILESファイル管理TASTEFTPファイル転送TASTESSHリモートワークスペースTASTEZIP圧縮と展開開発ツールTASTECODERust 統合開発環境TASTESTUDIO統合開発・テスト環境TASTEETLデータ統合(ETL)サーバーTASTEREMOTEリモートデスクトップサーバーTASTEGEO空間情報サーバーTASTEMAILメールワークスペースはじめるダウンロードドキュメント購入すべての製品
マーケットプレイス
ニュース
技術ニュース今日の開発ニュース開発ドキュメントプログラミング言語RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDartWebフロントエンド フレームワークNext.jsReactVue.js · NuxtSvelteKitAngularサーバー フレームワークSpring BootDjangoFastAPIASP.NET CoreNestJS · Expressアプリ・デスクトップ フレームワークTauriFlutterReact NativeElectronアルゴリズムアルゴリズムの基礎主要アルゴリズム発展アルゴリズム実務のアルゴリズム
コミュニティプロジェクト開発ログプロンプトAIツールの問題ショーケースコミュニティガイド
協業技術移転ウェブサイト構築デスクトップアプリ構築リリース・決済パイプライン販売パートナーお問い合わせ
サービスリモートデスクトップインストールパッケージのカスタマイズ
TASTEDEV
製品

デスクトップツール

TASTECAD複雑な図面を、軽やかにひらくTASTEFILES必要なファイルだけを、最速でTASTEFTPファイルが行き交う、いちばん端正な道TASTESSHサーバーとあなたを、より確かにつなぐTASTEZIPより速くまとめ、より安全にひらく

開発ツール

TASTECODERust アプリの編集・ビルド・デバッグ・テストまでひとつのウィンドウでTASTESTUDIO編集からリモートテスト、承認した AI 修正までTASTEETL値を見ながら、データを運ぶ

サーバー

TASTEREMOTE自社サーバーで運用するリモートデスクトップTASTEGEOGeoServer 互換の空間情報サーバーを Rust で作り直しますTASTEMAILメールの主導権を、もう一度自分の手に

はじめる

ダウンロード全製品の最新版ドキュメント各製品の使い方購入サブスクリプション・永久ライセンスすべての製品全製品を一覧で
すべての製品
マーケットプレイスニュース
技術

ニュース

今日の開発ニュース言語・フレームワーク・GitHub・AI の公式発表開発ドキュメント言語・フレームワーク・アルゴリズムのガイド

プログラミング言語

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

フレームワーク

Webフロントエンド フレームワークNext.jsReactVue.js · NuxtSvelteKitAngular
サーバー フレームワークSpring BootDjangoFastAPIASP.NET CoreNestJS · Express
アプリ・デスクトップ フレームワークTauriFlutterReact NativeElectron

アルゴリズム

アルゴリズムの基礎計算量解析 · ソート · 探索 · 基本データ構造 · 木構造とヒープ主要アルゴリズムグラフ探索 · 最短経路と最小全域木 · 動的計画法 · 貪欲法 · 分割統治法 · バックトラッキング発展アルゴリズム文字列アルゴリズム · 数学と整数論 · ビット演算 · セグメント木 · Union-Find実務のアルゴリズムコーディング面接対策 · LRUキャッシュ · レート制限 · コンシステントハッシュ法
開発ドキュメントをすべて見る
コミュニティ
プロジェクトビルダーと作品を探す開発ログ決定と試行錯誤プロンプト再利用できる指示AIツールの問題Claude・Codex・Gemini の問題と回避策ショーケース完成した成果コミュニティガイドオープンにつくる方法
協業
技術移転Rust・egui でネイティブアプリを作るウェブサイト構築10言語、アカウント、ドキュメントとダウンロードデスクトップアプリ構築Rust・egui、WebView なしリリース・決済パイプライン署名・MSI・deb・rpm・AppImage・ハッシュ販売パートナー紹介して決済額の30%お問い合わせ構築・提携・投資のご相談
サービス
リモートデスクトップブラウザから自分のパソコンへインストールパッケージのカスタマイズ必要な機能だけ、設定は事前に
購入
JA
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
ログイン
ログイン
TASTEDEV

小さなツールから、より良い開発へ。

support@tastedev.netTASTEDEVを支援
製品製品ラインナップ購入ドキュメントダウンロードマーケットプレイスサポート
コミュニティプロジェクト開発ログプロンプトAIツールの問題ショーケース
ポリシープライバシーポリシー利用規約サブスクリプション規約返金ポリシーコミュニティガイドライン
アカウントログイン新規登録
訪問者
今日
012345678901234567890123456789012345678901234567890123456789
昨日
012345678901234567890123456789012345678901234567890123456789
累計閲覧
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
商号
GXSOFT
代表者
CHOI YOUNG GU
事業者登録番号
853-44-00368
所在地
9F V24, 351 Gyeongin-ro, Michuhol-gu, Incheon, Republic of Korea
電話
+82-10-4404-1523
メール
whitecalvin@tastedev.net
個人情報保護責任者
CHOI YOUNG GU

© 2026 TASTEDEV製品情報は検証済みの開発ソースに基づいています。リリース・改善中

開発ドキュメント
セグメント木
セグメント木代表的な実装ステップごとのガイド公式ドキュメント・参考資料ディスカッションコメント

ほかのアルゴリズム

アルゴリズムの基礎5
計算量解析ソート探索基本データ構造木構造とヒープ
主要アルゴリズム6
グラフ探索最短経路と最小全域木動的計画法貪欲法分割統治法バックトラッキング
発展アルゴリズム4
文字列アルゴリズム数学と整数論ビット演算Union-Find
実務のアルゴリズム4
コーディング面接対策LRUキャッシュレート制限コンシステントハッシュ法

アルゴリズム

セグメント木

セグメント木は配列の区間和・区間最小値の問い合わせと値の更新をどちらも O(log n) で処理するデータ構造で、和だけならフェニック木(BIT)が軽量な代替です。

ガイドを始めるディスカッション

セグメント木は、配列を半分ずつに分けてできる各区間について、和・最小値・最大値などの要約値を保存する二分木です。根は配列全体、葉は要素一つを担当し、内部ノードは二つの子の値をまとめた値を持ちます。そのため、どんな連続区間への問い合わせも、いくつかのノードを組み合わせるだけで答えられます。

累積和は区間和を O(1) で求められますが、要素が一つ変わるだけで O(n) かかります。配列をそのまま使えば更新は速いものの、問い合わせのたびに O(n) かかります。セグメント木は一点更新と区間クエリをどちらも O(log n) で処理するので、値が変わり続けながら区間の問い合わせが次々に届く場面に向いています。遅延伝播を加えれば、区間全体に値を足すような区間更新も O(log n) で扱えます。

まず累積和の限界を理解し、小さな配列で木を手で描いて、クエリと更新がどのノードを通るかをたどるのがおすすめです。続いて短い反復版の実装とフェニック木を自分で書き、区間最小値、転倒数の数え上げ、区間加算と区間和といった定番問題で練習すると、競技プログラミングや技術面接ですぐに使えるようになります。

特徴

半分ずつに分けた区間の要約

各ノードが配列の一区間を担当して和や最小値を保存します。結合法則を満たし単位元を持つ演算なら、同じ構造でどれでも扱えます。

O(log n) の更新とクエリ

要素を一つ変えると葉から根までの一本の経路だけを再計算し、区間クエリは各段で多くても二つのノードを組み合わせて答えます。

遅延伝播による区間更新

区間更新は、その区間を覆うノードにメモを残しておき、子へ降りる必要が生じたときだけ渡すことで O(log n) に収めます。

軽量な代替としてのフェニック木

和のように引き算で戻せる演算なら、長さ n + 1 の配列と短いループだけで同じ計算量を実現するフェニック木(BIT)が使えます。

主な用途

  • 技術面接や競技プログラミングの区間クエリ問題

このページの目次

  1. 特徴
  2. 主な用途
  3. 代表的な実装
  4. ステップごとのガイド
  5. 公式ドキュメント・参考資料
  6. ディスカッション
  7. コメント
  • ランキングと累積頻度の集計
  • 時系列メトリクスの区間合計・最大値の取得
  • 走査線を使う計算幾何と予約管理
  • 代表的な実装

    長さ 2n の配列の後半に要素を置き、前半の各位置に二つの子の和を保存する反復版のセグメント木です。update は葉から根へ上りながら和を再計算し、query は半開区間 [left, right) の両端から上りながら境界にあるノードだけを足します。実行すると 26、17、28 が順に表示されます。

    segment_tree.py

    class SegmentTree:
        """Iterative segment tree: point update and range sum in O(log n)."""
    
        def __init__(self, values):
            self.n = len(values)
            self.tree = [0] * self.n + list(values)
            for i in range(self.n - 1, 0, -1):
                self.tree[i] = self.tree[2 * i] + self.tree[2 * i + 1]
    
        def update(self, index, value):
            i = index + self.n
            self.tree[i] = value
            while i > 1:
                i //= 2
                self.tree[i] = self.tree[2 * i] + self.tree[2 * i + 1]
    
        def query(self, left, right):
            """Sum of values[left:right] (half-open range)."""
            total = 0
            lo, hi = left + self.n, right + self.n
            while lo < hi:
                if lo & 1:
                    total += self.tree[lo]
                    lo += 1
                if hi & 1:
                    hi -= 1
                    total += self.tree[hi]
                lo //= 2
                hi //= 2
            return total
    
    
    if __name__ == "__main__":
        tree = SegmentTree([5, 3, 7, 9, 6, 4, 1, 2])
        print(tree.query(2, 6))  # 7 + 9 + 6 + 4 = 26
        tree.update(3, 0)
        print(tree.query(2, 6))  # 7 + 0 + 6 + 4 = 17
        print(tree.query(0, 8))  # 28
    
    python segment_tree.py

    ステップごとのガイド

    インストールから セグメント木 の中心となる考え方まで、6 章で順を追って学びます。

    1. Concepts英語
    2. How It Works英語
    3. Implementation英語
    4. Complexity英語
    5. Practice Problems英語
    6. Real-World Use英語

    公式ドキュメント・参考資料

    • 公式AtCoder Library: Segtree
    • 学ぶSegment Tree - cp-algorithms
    • 学ぶFenwick Tree - cp-algorithms
    • 学ぶVisuAlgo: Segment Tree
    • リファレンスSegment tree (Wikipedia)
    • リファレンスFenwick tree (Wikipedia)
    • リファレンスPrefix sum (Wikipedia)
    • コミュニティEfficient and easy segment trees (Codeforces)

    ディスカッション

    ディスカッションを始める

    セグメント木 について質問し、経験を共有し、意見を交わす場所です。

    まだディスカッションはありません。最初の話題を始めましょう。

    コメント 0件

    人気のコメント順新しい順

    ログイン · ログインするとコメントできます。