Задачи на массивах
- Если массив не меняется (длина N)
- Сумма на префиксе за O(1)
- Сумма на отрезке за O(1)
- Минимум на префиксе за O(1)
- Минимум на отрезке фиксированной длины за O(1)
- Минимум на произвольном отрезке за O(1) с предподсчетом O(NlogN)
- Если массив меняется
- Одномерное дерево отрезков.
- Дерево Фенвика (для суммы)
Задачи на матрицах
- Если матрица не меняется (ширина W, высота H)
- Сумма в углу за O(1)
- Сумма в прямоугольнике за O(1)
- Минимум в углу за O(1)
- Минимум в прямоугольнике фиксированного размера за O(1)
- Минимум на произвольном прямоугольнике за O(1) с предподсчетом O(WHlogWlogH)
- Если массив меняется
- Двумерное дерево отрезков на матрице
- Двумерное дерево Фенвика на матрице (для суммы)
Двумерные деревья
- КД-дерево за [O(NlogN), O(N), O(sqrtN)]
- Сортировка точек, храним 2 перестановки.
- Делим или на четном уровене по X, на нечетном по Y. У каждой вершины 2 сына.
- Время работы O(sqrtN).
- КД-дерево эквивалентно одномерному дереву отрезков.
- Not read Квадро-дерево
- Not read Решеаем задачу о площади пересечения/объединения кругов приближенно.
- Not read Еще одна задача: найти не покрытую точку.
- 2D дерево отрзков за [O(NlogN), O(NlogN), O(log2N)] (жесть)
- Набор точек фиксирован. Координаты фиксированы. Значения в точках можно менять.
- Запрос за O(log2N). Минус по сравнению с КД-деревом.
Функции на путях дерева в online
- Путь = сумма двух вертикальных путей (через LCA)
- Дерево не меняется.
- Длина пути за O(1) + LCA.
- Сумма на пути за O(1) + LCA.
- Минимум на пути за O(logN) (двоичные подъемы)
- Дерево меняется
- Эйлеров обход и одномерное дерево отрезков для суммы.
- Not read Покрытие дерева массивами (деревьями отрезков)
- Сведение задачи к прямоугольному запросу на плоскости и 2-мерным деревьям.
Функции на путях дерева в offline
- Дерево не меняется.
- LCA в offline за O(1*);
- dfs по дереву рулит
- Решение RMQ на дереве одномерным деревом отрезков.