E049. Aufgabe RMQ (Range Minimum Query - минимум на отрезке). Lösung за O (1) с препроцессингом O (N)
Источник: e-maxx.ru/algo, страница PDF 146.
Дан Array A[1..N]. Поступают запросы вида (L, R), на каждый запрос it is required find минимум в Arrayе A, начиная с позиции L и заканчивая позицией R. Array A изменяться в процессе работы не может, т.е. здесь описано Lösung статической задачи RMQ. Здесь описано асимтпотически оптимальное Lösung. Оно несколько стоит особняком от других Algorithmusов решения RMQ, поскольку оно сильно отличается от них: оно сводит задачу RMQ к задаче LCA, а затем использует Algorithmus Фарах-Колтона и Бендера, который сводит задачу LCA обратно к RMQ (но уже частного вида) и решает её.
Algorithmus
Построим по Arrayу A декартово Baum, где у каждой вершины ключом будет позиция i, а приоритетом - само number A [i] (предполагается, что в декартовом дереве приоритеты упорядочены от меньшего в корне к большим). Такое Baum можно построить за O (N). Тогда запрос RMQ(l,r) эквивалентен запросу LCA(l',r'), где l' - vertex, соответствующая elementу A[l], r' - соответствующая A[r]. Действительно, LCA найдёт вершину, которая по ключу находится между l' и r', т.е. по позиции в Arrayе A будет между l и r, и при этом вершину, наиболее близкую к корню, т.е. с наименьшим приоритетом, т.е. наименьшим значением. Задачу LCA мы можем решать за O (1) с препроцессингом O (N) с помощью Algorithmusа Фарах-Колтона и Бендера, который, что интересно, сводит задачу LCA обратно к задаче RMQ, но уже частного вида.
C# Lösung
Auto-Entwurf, vor dem Einreichen prüfen// C# draft for: Задача RMQ (Range Minimum Query - минимум на отрезке). Решение за O (1) с препроцессингом O (N)
// Original e-maxx article has no compact code listing in the extracted PDF text.
C++ Lösung
zugeordnet/original// C++ source for: Задача RMQ (Range Minimum Query - минимум на отрезке). Решение за O (1) с препроцессингом O (N)
// Compact code block was not extracted from this article.
Java Lösung
Auto-Entwurf, vor dem Einreichen prüfen// Java draft for: Задача RMQ (Range Minimum Query - минимум на отрезке). Решение за O (1) с препроцессингом O (N)
// Original e-maxx article has no compact code listing in the extracted PDF text.
Материал разбит как Algorithmusическая Aufgabe: изучить постановку, понять асимптотику и реализовать Algorithmus на выбранном языке.
Stellen zu dieser Aufgabe
aktive Stellen with overlapping task tags are angezeigt.