<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%A7%D0%B5%D0%B6%D0%B5%D0%B3%D0%BE%D0%B2+%D0%93%D0%BB%D0%B5%D0%B1</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%A7%D0%B5%D0%B6%D0%B5%D0%B3%D0%BE%D0%B2+%D0%93%D0%BB%D0%B5%D0%B1"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%A7%D0%B5%D0%B6%D0%B5%D0%B3%D0%BE%D0%B2_%D0%93%D0%BB%D0%B5%D0%B1"/>
		<updated>2026-04-23T09:56:35Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_RMQ_%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B5_LCA&amp;diff=71727</id>
		<title>Сведение задачи RMQ к задаче LCA</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_RMQ_%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B5_LCA&amp;diff=71727"/>
				<updated>2019-07-01T14:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;Чежегов Глеб: Не соблюдены нормы русского языка. Изменил 3 ошибки (одна орфографическая и две пунктуационных).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Шаблон:Задача&lt;br /&gt;
|definition =Дан массив &amp;lt;tex&amp;gt;A[1..N]&amp;lt;/tex&amp;gt;. Поступают запросы вида &amp;lt;tex&amp;gt;(i, j)&amp;lt;/tex&amp;gt;, на каждый запрос требуется найти минимум в массиве &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, начиная с позиции &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и заканчивая позицией &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Wiki.PNG|thumb|right|400x200px|Пример декартового дерева]]&lt;br /&gt;
Будем решать задачу RMQ, уже умея решать задачу LCA. Для хранения решения задачи о LCA будем использовать  [[декартово дерево по неявному ключу]]. Тогда минимум на отрезке от &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt; массива &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет равен наименьшему общему предку &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-того и &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-того элементов из декартова дерева, построенного на массиве &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Декартово дерево по неявному ключу на массиве &amp;lt;tex&amp;gt;A[1..N]&amp;lt;/tex&amp;gt; {{---}} это бинарное дерево, допускающее следующее рекурсивное построение:&lt;br /&gt;
* Корнем дерева является элемент массива, имеющий минимальное значение &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, скажем &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt;. Если минимальных элементов несколько, можно взять любой.&lt;br /&gt;
* Левым поддеревом является декартово дерево на массиве &amp;lt;tex&amp;gt;A[1..i-1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Правым поддеревом является декартово дерево на массиве &amp;lt;tex&amp;gt;A[i+1..N]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Здесь и далее &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; будет также использоваться для обозначения соответствующей вершины дерева.&lt;br /&gt;
&lt;br /&gt;
Построим декартово дерево на массиве &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;RMQ(i, j)&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;LCA(A[i], A[j])&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Корректность ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;RMQ(i, j)&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;LCA(A[i], A[j])&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Положим &amp;lt;tex&amp;gt;w = LCA(A[i], A[j])&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A[j]&amp;lt;/tex&amp;gt; не принадлежат одновременно либо правому, либо левому поддереву &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, потому как тогда бы соответствующий сын находился на большей глубине, чем &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, и также являлся предком как &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt;, так и &amp;lt;tex&amp;gt;A[j]&amp;lt;/tex&amp;gt;, что противоречит определению &amp;lt;tex&amp;gt;LCA&amp;lt;/tex&amp;gt;. Из этого замечания следует, что &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; лежит между &amp;lt;tex&amp;gt;A[i]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A[j]&amp;lt;/tex&amp;gt; и, следовательно, принадлежит отрезку &amp;lt;tex&amp;gt;A[i..j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По построению мы также знаем, что:&lt;br /&gt;
# Любая вершина дерева имеет свое значение меньшим либо равным значению её детей.&lt;br /&gt;
# Поддерево с корнем в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; содержит в себе подмассив &amp;lt;tex&amp;gt;A[i..j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суммируя, получаем, что &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; имеет минимальное значение на отрезке, покрывающем &amp;lt;tex&amp;gt;A[i..j]&amp;lt;/tex&amp;gt;, и принадлежит отрезку &amp;lt;tex&amp;gt;A[i..j]&amp;lt;/tex&amp;gt;, отсюда &amp;lt;tex&amp;gt;RMQ(i, j) = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Сложность ===&lt;br /&gt;
Существует [[Декартово дерево#Построение декартова дерева|алгоритм]], который строит декартово дерево за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Используя [[Сведение задачи LCA к задаче RMQ | алгоритм построения LCA]], получаем:&lt;br /&gt;
препроцессинг для &amp;lt;tex&amp;gt;LCA&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; и ответ на запрос {{---}} &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Нам нужно единожды построить декартово дерево за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, единожды провести препроцессинг за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; и отвечать на запросы за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили &amp;lt;tex&amp;gt;RMQ&amp;lt;/tex&amp;gt; с построением за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; и ответом на запрос за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См.также ==&lt;br /&gt;
*[[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
*[[Декартово дерево]]&lt;br /&gt;
*[[Алгоритм Фарака-Колтона и Бендера]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Задача о наименьшем общем предке]]&lt;/div&gt;</summary>
		<author><name>Чежегов Глеб</name></author>	</entry>

	</feed>