Сведение задачи RMQ к задаче LCA
Постановка задачи RMQ
Дан массив . Поступают запросы вида , на каждый запрос требуется найти минимум в массиве , начиная с позиции и заканчивая позицией .
Алгоритм
Декартово дерево (англ. сartesian tree) по неявному ключу на массиве — это бинарное дерево, допускающее следующее рекурсивное построение:
- Корнем дерева является элемент массива, имеющий минимальное значение , скажем . Если минимальных элементов несколько, можно взять любой.
- Левым поддеревом является декартово дерево на массиве .
- Правым поддеревом является декартово дерево на массиве .
Здесь и далее будет также использоваться для обозначения соответствующей вершины дерева.
Построим декартово дерево на массиве . Тогда = .
Доказательство
| Теорема: |
= . |
| Доказательство: |
|
Положим . Заметим, что и не принадлежат одновременно либо правому, либо левому поддереву , потому как тогда бы соответствующий сын находился на большей глубине, чем , и также являлся предком как так и , что противоречит определению . Из этого замечанию следует, что лежит между и и, следовательно, принадлежит отрезку .
|
Сложность
Выше описан алгоритм построения дерева за . Препроцессинг для — и ответ на запрос . В итоге получили {построение , запрос }.