E049. Aufgabe RMQ (Range Minimum Query - минимум на отрезке). Lösung за O (1) с препроцессингом O (N)

e-maxx algorithm original: C/C++ #algorithm #emaxx #graph #range-query #rmq
Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.

Источник: 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.

Alle Stellen
Es gibt noch keine aktiven Stellen.