RMQ и LCA (14 мая 2021)
- Задача RMQ
- Формулировка, решение деревом отрезков
- "Lower bound on Time" для меняющегося массива через сортировку
- Sparse Table и модификации
- Sparse Table за [O(nlogn), O(1)]. Неизменяемость vs изменяемость.
- Подходит для любой идемпотентной коммутативной ассоциативной функции. Примеры функций: min, gcd, sum
- Модифицируем структуру до [O(n), O(logn)], [O(nloglogn), O(1)], [O(n), O(loglogn)]
- Разбиение на отрезки: дерево отрезков бьёт любой отрезок на logn отрезков, SparseTable покрывает двумя
- Алгоритм Фараха-Колтона-Бендера
- RMQ → LCA (построение декартова дерева за линейное время)
- LCA → RMQ±1 (Эйлеров обход, 3 версии обхода)
- Решение задачи RMQ±1 с помощью четырёх русских
- Максимально грубый прекалк
- Прекалк за 2k
- Замечания
- LCA мы умеем считать SparseTable-ом за O(1)
- Поддерево = отрезок эйлерова обхода, функция от поддерева = функция на отрезке
− Перерыв −
- LCA
- Обход дерева, глубины, времена входа-выхода, isAncestor in O(1)
- LCA двоичными подъёмами за [O(nlogn), O(logn)]
- LCA а offline Тарьяном за O((n+m)α)
- LA (Level Ancestor)
- Предподсчитаем всё (n2, 1).
- Уже умеем: двоичные подъёмы (nlogn, logn)
- Алгоритм Вишкина за [O(n), O(logn)]
- [skipped] [в практике] Уже умеем делать: Offline за O(n+m);
- [skipped] Упражнение: использовать 4-х русских, чтобы получить [O(n), O(1)]
- Euler-Tour-Tree
− Перерыв −
- [skipped] Доплекция: LA за O(1)
- [skipped] longest-path decomposition, ladder decomposition [O(nlogn), O(1)]
- [skipped] Идея: храним подъёмы только от листьев (предподсчёт: dfs в offline)
- [skipped] Микро-макро эвристика (4 русских): обрубаем все поддеревья размера менее logn/4