Задачи RMQ и LCA (3 марта)
- Сканирующая прямая
- Общая схема, на какие запросы мы умеем по-простому отвечать
- Площадь объединения прямоугольников
- Sparse Table и модификации
- Sparse Table [O(nlogn), O(1)]. Неизменяема. Подходит для любой идемпотентной коммутативной ассоциативной функции.
- Disjoint Sparse Table [O(nlogn), O(1)]. Неизменяема. Подходит для любой ассоциативной функции.
- Примеры функций: min, gcd, sum, произведение, композиция перестановок, сумма векторов, максимум векторов
- Модифицируем структуру до [O(n), O(logn)], [O(nloglogn), O(1)], [O(n), O(loglogn)]
- Алгоритм Фараха-Колтона-Бендера
- RMQ → LCA (построение декартова дерева за линейное время)
- LCA → RMQ±1 (Эйлеров обход, 3 версии обхода)
- Решение задачи RMQ±1 с помощью четырёх русских
- Замечания: LCA мы умеем считать SparseTable-ом за O(1), поддерево = отрезок, функция от поддерева = функция на отрезке
- LCA
- Обход дерева, глубины, времена входа-выхода, isAncestor in O(1)
- LCA двоичными подъёмами за [O(nlogn), O(logn)]