Задачи RMQ и LCA

Катастрофически западает солнце

Задачи RMQ и LCA

План

  1. задача и применение
  2. RMQ -> LCA
  3. offline LCA
  4. online RMQ
  5. ±1 RMQ
  6. LCA -> ±1 RMQ

Задача и применение

Задача и применение

RMQ (range minimum query) Выбор наименьшего элемента в отрезке индексов.

Дано: \(A = \{a_k \colon k < n \}\).

Операции:

Задача и применение

LCA (less common ancestor) Выбор ближайшего общего предка.

Дано: дерево.

Операции:

Задача и применение

</figcaption>

Задача и применение

Применение:

RMQ -> LCA

RMQ -> LCA

Для элементов массива \(A\) определим

Построим декартово дерево (\(O(n)\)):

RMQ -> LCA

Offline LCA

Offline LCA

Пусть все запросы известны заранее

Найдём все ответы за один проход по дереву (Tarjan).

  1. Для каждой вершины выпишем все пары, с её участием.
  2. Будем использовать post-order обход.
  3. По мере обхода будем строить DDF.

Offline LCA

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>

Offline LCA

При рассмотрении вершины \(x\) пройдёмся по всем парам с её участием.

Рассмотрим только те пары, где вторая вершина \(y\) уже просмотрена.

Решением этой пары будет корень дерева, содержащего \(y\).

Offline LCA

Сложность предпросчёта будет

Online RMQ

Online RMQ

Можно подсчитать результат для всех возможных запросов

Можно оставить только столбцы с номерами вида \(2^k\)

Online RMQ

\(\rmq(i, j)\)

±1 RMQ

±1 RMQ

Добавим ограничение: \(|a_k - a_{k+1}| = 1\) для \(k < n - 1\).

±1 RMQ

Разобьём \(A\) на блоки \(B_\ell\) размера \(b\):

Логарифмическая таблица:

Запросы \(\rmq(i, j)\) делятся на 2 типа:

Запрос RMQ внутри блока

Запрос RMQ с головой, телом и хвостом

±1 RMQ

Сигнатура блока:

Построим таблицы для всех сигнатур: \(2^{b - 1} \times b \times b\)

±1 RMQ

Итого расход по памяти:

±1 RMQ

Итого расход по памяти:

При \(b = \frac{\log n}{2}\):

LCA -> ±1 RMQ

LCA -> ±1 RMQ

</figcaption>

LCA -> ±1 RMQ

LCA -> ±1 RMQ

LCA -> ±1 RMQ

Рассмотрим последовательность глубин:

LCA -> ±1 RMQ

classDef zero  color:tomato
classDef one   color:steelblue
classDef two   color:blueviolet

class E zero
class C one
class A two

Рассмотрим последовательность глубин: