Катастрофически западает солнце
RMQ (range minimum query) Выбор наименьшего элемента в отрезке индексов.
Дано: \(A = \{a_k \colon k < n \}\).
Операции:
LCA (less common ancestor) Выбор ближайшего общего предка.
Дано: дерево.
Операции:
</figcaption>
Применение:
Для элементов массива \(A\) определим
Построим декартово дерево (\(O(n)\)):
Пусть все запросы известны заранее
Найдём все ответы за один проход по дереву (Tarjan).
classDef zero fill:tomato
classDef one fill:darkorange
classDef two fill:gold
classDef three fill:chartreuse
class A,B zero
class C,E,F one
class G,I two
class J three
</figcaption>
При рассмотрении вершины \(x\) пройдёмся по всем парам с её участием.
Рассмотрим только те пары, где вторая вершина \(y\) уже просмотрена.
Решением этой пары будет корень дерева, содержащего \(y\).
Можно подсчитать результат для всех возможных запросов
Можно оставить только столбцы с номерами вида \(2^k\)
\(\rmq(i, j)\)
Разобьём \(A\) на блоки \(B_\ell\) размера \(b\):
Логарифмическая таблица:
Запросы \(\rmq(i, j)\) делятся на 2 типа:
Сигнатура блока:
Построим таблицы для всех сигнатур: \(2^{b - 1} \times b \times b\)
Итого расход по памяти:
При \(b = \frac{\log n}{2}\):
</figcaption>
Рассмотрим последовательность глубин:
classDef zero color:tomato
classDef one color:steelblue
classDef two color:blueviolet
class E zero
class C one
class A two
Рассмотрим последовательность глубин: