DEV//UNIT
← Алгоритмыdata-structures

Дерево отрезков

Суммы/минимумы на любом диапазоне из 2-3 готовых узлов.

время O(log n)память O(n)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class SegmentTree {
2 private n: number
3 private sum: number[] // узел i покрывает диапазон
4
5 constructor(values: number[]) {
6 this.n = values.length
7 this.sum = new Array(2 * this.n).fill(0)
8 for (let i = 0; i < this.n; i++) this.sum[this.n + i] = values[i]!
9 for (let i = this.n - 1; i > 0; i--) {
10 this.sum[i] = this.sum[2 * i]! + this.sum[2 * i + 1]!
11 }
12 }
13
14 rangeSum(l: number, r: number): number { // [l, r)
15 let res = 0
16 for (l += this.n, r += this.n; l < r; l >>= 1, r >>= 1) {
17 if (l & 1) res += this.sum[l++]!
18 if (r & 1) res += this.sum[--r]!
19 }
20 return res
21 }
22
23 update(i: number, value: number): void {
24 let pos = i + this.n
25 this.sum[pos] = value
26 for (pos >>= 1; pos > 0; pos >>= 1) {
27 this.sum[pos] = this.sum[2 * pos]! + this.sum[2 * pos + 1]!
28 }
29 }
30}

Проблема

Суммы/минимумы на любом диапазоне из 2-3 готовых узлов.

Что вы видите

Узел = сумма отрезка; запрос спускается и склеивает куски.

Как это работает

Итеративная реализация: дерево в массиве 2n, запрос [l,r) идёт снизу вверх. Обновление поднимается от листа. Любая ассоциативная операция.

Пошаговый разбор

  1. 01

    Листья

    Элементы внизу.

  2. 02

    Родители

    Суммы половинок.

  3. 03

    Запрос

    Куски слева и справа.

Complexity и ограничения

time
O(log n)
space
O(n)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Статистика

Скользящие метрики.

Игры

Урон по области.

БД

Range-агрегаты.

Связанные алгоритмы

Shorts

«RMQ/RSQ из пары узлов»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

RMQ/RSQ из пары узлов
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/segment-tree