Сведение задачи RMQ к задаче LCA — различия между версиями
(+categories, -links) |
м |
||
Строка 1: | Строка 1: | ||
− | + | {{Шаблон:Задача | |
− | + | |definition =Дан массив <tex>A[1..N]</tex>. Поступают запросы вида <tex>(i, j)</tex>, на каждый запрос требуется найти минимум в массиве <tex>A</tex>, начиная с позиции <tex>i</tex> и заканчивая позицией <tex>j</tex>. | |
− | Дан массив <tex>A[1..N]</tex>. Поступают запросы вида <tex>(i, j)</tex>, на каждый запрос требуется найти минимум в массиве <tex>A</tex>, начиная с позиции <tex>i</tex> и заканчивая позицией <tex>j</tex>. | + | }} |
+ | |||
== Алгоритм == | == Алгоритм == | ||
+ | [[Файл:Wiki.PNG|thumb|right|300x150px|Пример декартового дерева]] | ||
Декартово дерево (англ. ''сartesian tree'') по неявному ключу на массиве <tex>A[1..N]</tex> {{---}} это бинарное дерево, допускающее следующее рекурсивное построение: | Декартово дерево (англ. ''сartesian tree'') по неявному ключу на массиве <tex>A[1..N]</tex> {{---}} это бинарное дерево, допускающее следующее рекурсивное построение: | ||
* Корнем дерева является элемент массива, имеющий минимальное значение <tex>A</tex>, скажем <tex>A[i]</tex>. Если минимальных элементов несколько, можно взять любой. | * Корнем дерева является элемент массива, имеющий минимальное значение <tex>A</tex>, скажем <tex>A[i]</tex>. Если минимальных элементов несколько, можно взять любой. | ||
Строка 11: | Строка 13: | ||
Построим декартово дерево на массиве <tex>A</tex>. Тогда <tex>RMQ(i, j)</tex> = <tex>LCA(A[i], A[j])</tex>. | Построим декартово дерево на массиве <tex>A</tex>. Тогда <tex>RMQ(i, j)</tex> = <tex>LCA(A[i], A[j])</tex>. | ||
− | + | <br clear="all"> | |
== Доказательство == | == Доказательство == | ||
{{Теорема | {{Теорема |
Версия 12:59, 4 июня 2015
Задача: |
Дан массив | . Поступают запросы вида , на каждый запрос требуется найти минимум в массиве , начиная с позиции и заканчивая позицией .
Содержание
Алгоритм
Декартово дерево (англ. сartesian tree) по неявному ключу на массиве
— это бинарное дерево, допускающее следующее рекурсивное построение:- Корнем дерева является элемент массива, имеющий минимальное значение , скажем . Если минимальных элементов несколько, можно взять любой.
- Левым поддеревом является декартово дерево на массиве .
- Правым поддеревом является декартово дерево на массиве .
Здесь и далее
будет также использоваться для обозначения соответствующей вершины дерева.Построим декартово дерево на массиве
Доказательство
Теорема: |
= . |
Доказательство: |
Положим .Заметим, что и не принадлежат одновременно либо правому, либо левому поддереву , потому как тогда бы соответствующий сын находился на большей глубине, чем , и также являлся предком как так и , что противоречит определению . Из этого замечанию следует, что лежит между и и, следовательно, принадлежит отрезку .
|
Сложность
Следующий алгоритм строит декартово дерево за . Используя Сведение задачи LCA к задаче RMQ, получаем: препроцессинг для — и ответ на запрос — . В итоге получили с построением за и ответом на запрос за .