Сведение задачи RMQ к задаче LCA
Версия от 06:20, 6 мая 2011; Roman Livarsky (обсуждение | вклад) (Новая страница: «== Постановка задачи RMQ == Дан массив <tex>A[1..N]</tex>. Поступают запросы вида <tex>(i, j)</tex>, на каждый …»)
Постановка задачи RMQ
Дан массив
. Поступают запросы вида , на каждый запрос требуется найти минимум в массиве , начиная с позиции и заканчивая позицией .Алгоритм
Декартово дерево(Сartesian tree) на массиве
- это бинарное дерево, рекурсивно определенное следующим образом:- Корнем дерева является минимальное значение в массиве ,скажем .
- Левым поддеревом является декартово дерево на массиве .
- Правым поддеревом является декартово дерево на массиве .
Построим декартово дерево на массиве
. Тогда = .Доказательство
Мы знаем что:
- 1. Любая вершина дерева всегда имеет меньшее значение, чем её дети. Тогда любой предок или меньше их самих.
- 2. Все вершины, которые лежат в дереве на пути от до , а так же их поддеревья образуют подмассив (возьмём только правое поддерево у и левое поддерево у ). Т.к. всё, что левее -го элемента в массиве, лежит левее в дереве, и всё, что правее -го, лежит правее . A дерево содержит все элементы .
- 3. Из всех вершин, определенных в п.2, ближайший к корню и по п.1 имеет наименьшее значение в подмассиве .
Сложность
Построение дерева наивным алгоритмом
. Существует алгоритм построение за . Препроцессинг для и ответ на запрос . В итоге получили {построение , запрос }.