<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://acm.khpnets.info/w39/index.php?action=history&amp;feed=atom&amp;title=E-olymp_5293</id>
	<title>E-olymp 5293 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://acm.khpnets.info/w39/index.php?action=history&amp;feed=atom&amp;title=E-olymp_5293"/>
	<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=E-olymp_5293&amp;action=history"/>
	<updated>2026-05-13T12:10:34Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=E-olymp_5293&amp;diff=2006&amp;oldid=prev</id>
		<title>Ctrlalt: /* Решение */</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=E-olymp_5293&amp;diff=2006&amp;oldid=prev"/>
		<updated>2016-04-24T21:41:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Решение&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 21:41, 24 апреля 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Строка 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Решение ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Решение ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  #include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  #include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; #include &amp;lt;tuple&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  #include &amp;lt;vector&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  #include &amp;lt;vector&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  #include &amp;lt;algorithm&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  #include &amp;lt;algorithm&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ctrlalt</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=E-olymp_5293&amp;diff=2002&amp;oldid=prev</id>
		<title>Ctrlalt: Новая страница: «== Ссылка на задачу == * [http://www.e-olymp.com/ru/problems/5293 E-olymp #5293 &amp;mdash; Декартово дерево]  == Комментарии …»</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=E-olymp_5293&amp;diff=2002&amp;oldid=prev"/>
		<updated>2016-04-24T21:10:01Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «== Ссылка на задачу == * [http://www.e-olymp.com/ru/problems/5293 E-olymp #5293 — Декартово дерево]  == Комментарии …»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Ссылка на задачу ==&lt;br /&gt;
* [http://www.e-olymp.com/ru/problems/5293 E-olymp #5293 &amp;amp;mdash; Декартово дерево]&lt;br /&gt;
&lt;br /&gt;
== Комментарии ==&lt;br /&gt;
По приоритетам узлы декартова дерева должны образовывать минимальную, а не максимальную кучу.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;tuple&amp;gt;&lt;br /&gt;
 #include &amp;lt;vector&amp;gt;&lt;br /&gt;
 #include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 struct KeyValuePriorityNode {&lt;br /&gt;
     int key, value, priority;&lt;br /&gt;
     KeyValuePriorityNode(int key, int value, int priority) : key(key), value(value), priority(priority) {}&lt;br /&gt;
     bool operator &amp;lt; (const KeyValuePriorityNode &amp;amp;that) const {&lt;br /&gt;
         return key &amp;lt; that.key;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Treap {&lt;br /&gt;
 &lt;br /&gt;
     struct TreapNode {&lt;br /&gt;
         int key, value, priority;&lt;br /&gt;
         TreapNode *left, *right;&lt;br /&gt;
         TreapNode(int key, int value, int priority) : key(key), value(value), priority(priority), left(0), right(0) {}&lt;br /&gt;
         TreapNode(int key, int value, int priority, TreapNode *left, TreapNode *right) : key(key), value(value), priority(priority), left(left), right(right) {}&lt;br /&gt;
     } *root;&lt;br /&gt;
 &lt;br /&gt;
     TreapNode *merge(TreapNode *a, TreapNode *b) {&lt;br /&gt;
         if (!a || !b)&lt;br /&gt;
             return a ? a : b;&lt;br /&gt;
         if (a-&amp;gt;priority &amp;gt; b-&amp;gt;priority) {&lt;br /&gt;
             a-&amp;gt;right = merge(a-&amp;gt;right, b);&lt;br /&gt;
             return a;&lt;br /&gt;
         } else {&lt;br /&gt;
             b-&amp;gt;left = merge(a, b-&amp;gt;left);&lt;br /&gt;
             return b;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void split(TreapNode *t, int splitKey, TreapNode *&amp;amp;a, TreapNode *&amp;amp;b) {&lt;br /&gt;
         if (!t) {&lt;br /&gt;
             a = b = 0;&lt;br /&gt;
             return;&lt;br /&gt;
         }&lt;br /&gt;
         if (t-&amp;gt;key &amp;lt; splitKey) {&lt;br /&gt;
             split(t-&amp;gt;right, splitKey, t-&amp;gt;right, b);&lt;br /&gt;
             a = t;&lt;br /&gt;
         } else {&lt;br /&gt;
             split(t-&amp;gt;left, splitKey, a, t-&amp;gt;left);&lt;br /&gt;
             b = t;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void recursivePrintNodeValues(TreapNode *currentNode, int parentValue) {&lt;br /&gt;
         if (!currentNode)&lt;br /&gt;
             return;&lt;br /&gt;
         int leftValue = currentNode-&amp;gt;left ? currentNode-&amp;gt;left-&amp;gt;value : 0;&lt;br /&gt;
         int rightValue = currentNode-&amp;gt;right ? currentNode-&amp;gt;right-&amp;gt;value : 0;&lt;br /&gt;
         printf(&amp;quot;%d %d %d\n&amp;quot;, parentValue, leftValue, rightValue);&lt;br /&gt;
         recursivePrintNodeValues(currentNode-&amp;gt;left, currentNode-&amp;gt;value);&lt;br /&gt;
         recursivePrintNodeValues(currentNode-&amp;gt;right, currentNode-&amp;gt;value);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Treap() : root(0) {}&lt;br /&gt;
 &lt;br /&gt;
     Treap(vector&amp;lt;KeyValuePriorityNode&amp;gt; nodes) {&lt;br /&gt;
         root = 0;&lt;br /&gt;
         sort(nodes.begin(), nodes.end());&lt;br /&gt;
         vector&amp;lt;TreapNode *&amp;gt; rightNodes;&lt;br /&gt;
         for (int i = 0; i &amp;lt; nodes.size(); i++) {&lt;br /&gt;
             while (!rightNodes.empty() &amp;amp;&amp;amp; rightNodes.back()-&amp;gt;priority &amp;lt; nodes[i].priority)&lt;br /&gt;
                 rightNodes.pop_back();&lt;br /&gt;
             TreapNode *&amp;amp;pointerToNewNode = rightNodes.empty() ? root : rightNodes.back()-&amp;gt;right;&lt;br /&gt;
             TreapNode *newNode = new TreapNode(nodes[i].key, nodes[i].value, nodes[i].priority, pointerToNewNode, 0);&lt;br /&gt;
             pointerToNewNode = newNode;&lt;br /&gt;
             rightNodes.push_back(newNode);&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void printNodeValues() {&lt;br /&gt;
         recursivePrintNodeValues(root, 0);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     freopen(&amp;quot;input.txt&amp;quot;, &amp;quot;r&amp;quot;, stdin);&lt;br /&gt;
     freopen(&amp;quot;output.txt&amp;quot;, &amp;quot;w&amp;quot;, stdout);&lt;br /&gt;
 &lt;br /&gt;
     int pairsCount;&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;pairsCount);&lt;br /&gt;
     vector&amp;lt;KeyValuePriorityNode&amp;gt; nodes;&lt;br /&gt;
     for (int i = 0; i &amp;lt; pairsCount; i++) {&lt;br /&gt;
         int key, priority;&lt;br /&gt;
         scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;key, &amp;amp;priority);&lt;br /&gt;
         nodes.push_back(KeyValuePriorityNode(key, i + 1, -priority));&lt;br /&gt;
     }&lt;br /&gt;
     Treap treap(nodes);&lt;br /&gt;
     printf(&amp;quot;YES\n&amp;quot;);&lt;br /&gt;
     treap.printNodeValues();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Сборник задач: E-olymp]]&lt;br /&gt;
[[Category: Задачи: Декартово дерево]]&lt;/div&gt;</summary>
		<author><name>Ctrlalt</name></author>
	</entry>
</feed>