Сведение задачи RMQ к задаче LCA — различия между версиями
(→Сложность) |
(→См.также) |
||
Строка 36: | Строка 36: | ||
== См.также == | == См.также == | ||
*[[Сведение задачи LCA к задаче RMQ]] | *[[Сведение задачи LCA к задаче RMQ]] | ||
+ | *[[Декартово дерево]] | ||
+ | *[[Алгоритм Фарака-Колтона и Бендера]] | ||
+ | |||
==Ссылки== | ==Ссылки== | ||
*[http://e-maxx.ru/algo/rmq_linear Задача RMQ. Решение за O (1) с препроцессингом O (N)] | *[http://e-maxx.ru/algo/rmq_linear Задача RMQ. Решение за O (1) с препроцессингом O (N)] |
Версия 14:55, 21 июня 2012
Постановка задачи RMQ
Дан массив
. Поступают запросы вида , на каждый запрос требуется найти минимум в массиве , начиная с позиции и заканчивая позицией .Алгоритм
Декартово дерево (англ. сartesian tree) по неявному ключу на массиве
— это бинарное дерево, допускающее следующее рекурсивное построение:- Корнем дерева является элемент массива, имеющий минимальное значение , скажем . Если минимальных элементов несколько, можно взять любой.
- Левым поддеревом является декартово дерево на массиве .
- Правым поддеревом является декартово дерево на массиве .
Здесь и далее
будет также использоваться для обозначения соответствующей вершины дерева.Построим декартово дерево на массиве
. Тогда = .Доказательство
Теорема: |
= . |
Доказательство: |
Положим .Заметим, что и не принадлежат одновременно либо правому, либо левому поддереву , потому как тогда бы соответствующий сын находился на большей глубине, чем , и также являлся предком как так и , что противоречит определению . Из этого замечанию следует, что лежит между и и, следовательно, принадлежит отрезку .
|
Сложность
Следующий алгоритм строит декартово дерево за . Используя Сведение задачи LCA к задаче RMQ, получаем: препроцессинг для — , и ответ на запрос — . В итоге получили с построением за и ответом на запрос за .