<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://acm.khpnets.info/w39/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alvelcom</id>
	<title>Олимпиадное программирование в УлГТУ - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://acm.khpnets.info/w39/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alvelcom"/>
	<link rel="alternate" type="text/html" href="https://acm.khpnets.info/wiki/%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/Alvelcom"/>
	<updated>2026-05-13T11:36:29Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=1993</id>
		<title>Префикс-функция</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=1993"/>
		<updated>2016-02-03T04:47:03Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Префикс-функция строки s &amp;amp;mdash; массив длин максимальных бордеров всех префиксов s. Бордер &amp;amp;mdash; собственный префикс, одновременно являющийся собственным суффиксом.&lt;br /&gt;
&lt;br /&gt;
 for (int i = 1; i &amp;lt; n; i++) {&lt;br /&gt;
     int border = p[i - 1];&lt;br /&gt;
     while (border &amp;gt; 0 &amp;amp;&amp;amp; s[i] != s[border])&lt;br /&gt;
         border = p[border - 1];&lt;br /&gt;
     p[i] = border + (s[i] == s[border]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Применения:&lt;br /&gt;
&lt;br /&gt;
* Поиск подстроки s в тексте t за O(N) (алгоритм Кнута-Морриса-Пратта). Составляется строка s#t, вычисляется её префикс-функция. Вхождения завершаются в позициях, для которых p[i] == |s|.&lt;br /&gt;
* Определение минимального периода m строки s за O(N). m = |s| - p[|s| - 1].&lt;br /&gt;
* Определение числа различных подстрок n строки s за O(N^2). Пусть известен ответ n&#039; для s&#039; = s[1 .. |s| - 1], за O(N) вычислим ответ для s. Новые подстроки &amp;amp;mdash; те, которые начинаются в начале строки и не встречаются далее. Вычисляем префикс-функцию s. Пусть m = max(p[i]). В s&#039; уже встречались все префиксы s длиной &amp;amp;le; m, поэтому n = n&#039; + (|s| - m).&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
Теория:&lt;br /&gt;
* [http://e-maxx.ru/algo/prefix_function e-maxx.ru &amp;amp;mdash; Префикс-функция. Алгоритм Кнута-Морриса-Пратта]&lt;br /&gt;
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F neerc.ifmo.ru/wiki &amp;amp;mdash; Префикс-функция]&lt;br /&gt;
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BD%D1%83%D1%82%D0%B0-%D0%9C%D0%BE%D1%80%D1%80%D0%B8%D1%81%D0%B0-%D0%9F%D1%80%D0%B0%D1%82%D1%82%D0%B0 neerc.ifmo.ru/wiki &amp;amp;mdash; Алгоритм Кнута-Морриса-Пратта]&lt;br /&gt;
* [http://brestprog.neocities.org/lections/prefixfunction.html brestprog.neocities.org &amp;amp;mdash; Префикс-функция. Алгоритм Кнута-Морриса-Пратта]&lt;br /&gt;
Код:&lt;br /&gt;
* [http://github.com/indy256/codelibrary/blob/master/java/src/Kmp.java CodeLibrary &amp;amp;mdash; Searching substring in O(N). Knuth–Morris–Pratt algorithm + prefix function]&lt;br /&gt;
* [http://github.com/ADJA/algos/blob/master/Strings/PrefixFunction.cpp Algos &amp;amp;mdash; Prefix function]&lt;br /&gt;
Задачи:&lt;br /&gt;
* [http://informatics.mccme.ru/course/view.php?id=29 informatics.mccme.ru &amp;amp;mdash; Курс &amp;amp;laquo;Алгоритмы на строках&amp;amp;raquo; &amp;amp;mdash; часть 1]&lt;br /&gt;
* [[:Категория:Задачи: Префикс-функция|Задачи: Префикс-функция]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Строки]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=1992</id>
		<title>Префикс-функция</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=1992"/>
		<updated>2016-02-03T04:46:40Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Префикс-функция строки s &amp;amp;mdash; массив длин максимальных бордеров всех префиксов s. Бордер &amp;amp;mdash; собственный префикс, одновременно являющийся собственным суффиксом.&lt;br /&gt;
&lt;br /&gt;
 for (int i = 1; i &amp;lt; n; i++) {&lt;br /&gt;
     int border = p[i - 1];&lt;br /&gt;
     while (border &amp;gt; 0 &amp;amp;&amp;amp; s[i] != s[border])&lt;br /&gt;
         border = p[border - 1];&lt;br /&gt;
     p[i] = border + (s[i] == s[border]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Применения:&lt;br /&gt;
&lt;br /&gt;
* Поиск подстроки s в тексте t за O(N) (алгоритм Кнута-Морриса-Пратта). Составляется строка s#t, вычисляется её префикс-функция. Вхождения завершаются в позициях, для которых p[i] == |s|.&lt;br /&gt;
* Определение минимального периода m строки s за O(N). m = |s| - p[|s| - 1].&lt;br /&gt;
* Определение числа различных подстрок n строки s за O(N^2). Пусть известен ответ n&#039; для s&#039; = s[1 .. |s| - 1], за O(N) вычислим ответ для s. Новые подстроки &amp;amp;mdash; те, которые начинаются в начале строки и не встречаются далее. Вычисляем префикс-функцию s. Пусть m = max(p[i]). В s&#039; уже встречались все префиксы s длиной &amp;amp;le; m, поэтому n = n&#039; + (|s| - m).&lt;br /&gt;
&lt;br /&gt;
Тест&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
Теория:&lt;br /&gt;
* [http://e-maxx.ru/algo/prefix_function e-maxx.ru &amp;amp;mdash; Префикс-функция. Алгоритм Кнута-Морриса-Пратта]&lt;br /&gt;
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F neerc.ifmo.ru/wiki &amp;amp;mdash; Префикс-функция]&lt;br /&gt;
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BD%D1%83%D1%82%D0%B0-%D0%9C%D0%BE%D1%80%D1%80%D0%B8%D1%81%D0%B0-%D0%9F%D1%80%D0%B0%D1%82%D1%82%D0%B0 neerc.ifmo.ru/wiki &amp;amp;mdash; Алгоритм Кнута-Морриса-Пратта]&lt;br /&gt;
* [http://brestprog.neocities.org/lections/prefixfunction.html brestprog.neocities.org &amp;amp;mdash; Префикс-функция. Алгоритм Кнута-Морриса-Пратта]&lt;br /&gt;
Код:&lt;br /&gt;
* [http://github.com/indy256/codelibrary/blob/master/java/src/Kmp.java CodeLibrary &amp;amp;mdash; Searching substring in O(N). Knuth–Morris–Pratt algorithm + prefix function]&lt;br /&gt;
* [http://github.com/ADJA/algos/blob/master/Strings/PrefixFunction.cpp Algos &amp;amp;mdash; Prefix function]&lt;br /&gt;
Задачи:&lt;br /&gt;
* [http://informatics.mccme.ru/course/view.php?id=29 informatics.mccme.ru &amp;amp;mdash; Курс &amp;amp;laquo;Алгоритмы на строках&amp;amp;raquo; &amp;amp;mdash; часть 1]&lt;br /&gt;
* [[:Категория:Задачи: Префикс-функция|Задачи: Префикс-функция]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Строки]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=960</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=960"/>
		<updated>2014-09-26T07:35:03Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
(function (d, w, c) {&lt;br /&gt;
    (w[c] = w[c] || []).push(function() {&lt;br /&gt;
        try {&lt;br /&gt;
            w.yaCounter4730998 = new Ya.Metrika({id:4730998,&lt;br /&gt;
                    webvisor:true,&lt;br /&gt;
                    clickmap:true,&lt;br /&gt;
                    trackLinks:true,&lt;br /&gt;
                    accurateTrackBounce:true,&lt;br /&gt;
                    trackHash:true});&lt;br /&gt;
        } catch(e) { }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    var n = d.getElementsByTagName(&amp;quot;script&amp;quot;)[0],&lt;br /&gt;
        s = d.createElement(&amp;quot;script&amp;quot;),&lt;br /&gt;
        f = function () { n.parentNode.insertBefore(s, n); };&lt;br /&gt;
    s.type = &amp;quot;text/javascript&amp;quot;;&lt;br /&gt;
    s.async = true;&lt;br /&gt;
    s.src = (d.location.protocol == &amp;quot;https:&amp;quot; ? &amp;quot;https:&amp;quot; : &amp;quot;http:&amp;quot;) + &amp;quot;//mc.yandex.ru/metrika/watch.js&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (w.opera == &amp;quot;[object Opera]&amp;quot;) {&lt;br /&gt;
        d.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, f, false);&lt;br /&gt;
    } else { f(); }&lt;br /&gt;
})(document, window, &amp;quot;yandex_metrika_callbacks&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=959</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=959"/>
		<updated>2014-09-26T07:34:48Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
alert(&amp;quot;sdfdsf&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
(function (d, w, c) {&lt;br /&gt;
    (w[c] = w[c] || []).push(function() {&lt;br /&gt;
        try {&lt;br /&gt;
            w.yaCounter4730998 = new Ya.Metrika({id:4730998,&lt;br /&gt;
                    webvisor:true,&lt;br /&gt;
                    clickmap:true,&lt;br /&gt;
                    trackLinks:true,&lt;br /&gt;
                    accurateTrackBounce:true,&lt;br /&gt;
                    trackHash:true});&lt;br /&gt;
        } catch(e) { }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    var n = d.getElementsByTagName(&amp;quot;script&amp;quot;)[0],&lt;br /&gt;
        s = d.createElement(&amp;quot;script&amp;quot;),&lt;br /&gt;
        f = function () { n.parentNode.insertBefore(s, n); };&lt;br /&gt;
    s.type = &amp;quot;text/javascript&amp;quot;;&lt;br /&gt;
    s.async = true;&lt;br /&gt;
    s.src = (d.location.protocol == &amp;quot;https:&amp;quot; ? &amp;quot;https:&amp;quot; : &amp;quot;http:&amp;quot;) + &amp;quot;//mc.yandex.ru/metrika/watch.js&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (w.opera == &amp;quot;[object Opera]&amp;quot;) {&lt;br /&gt;
        d.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, f, false);&lt;br /&gt;
    } else { f(); }&lt;br /&gt;
})(document, window, &amp;quot;yandex_metrika_callbacks&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=958</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=958"/>
		<updated>2014-09-26T07:34:25Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
alert(&amp;quot;sdfdsf&amp;quot;)&lt;br /&gt;
&amp;lt;!-- Yandex.Metrika counter --&amp;gt;&lt;br /&gt;
(function (d, w, c) {&lt;br /&gt;
    (w[c] = w[c] || []).push(function() {&lt;br /&gt;
        try {&lt;br /&gt;
            w.yaCounter4730998 = new Ya.Metrika({id:4730998,&lt;br /&gt;
                    webvisor:true,&lt;br /&gt;
                    clickmap:true,&lt;br /&gt;
                    trackLinks:true,&lt;br /&gt;
                    accurateTrackBounce:true,&lt;br /&gt;
                    trackHash:true});&lt;br /&gt;
        } catch(e) { }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    var n = d.getElementsByTagName(&amp;quot;script&amp;quot;)[0],&lt;br /&gt;
        s = d.createElement(&amp;quot;script&amp;quot;),&lt;br /&gt;
        f = function () { n.parentNode.insertBefore(s, n); };&lt;br /&gt;
    s.type = &amp;quot;text/javascript&amp;quot;;&lt;br /&gt;
    s.async = true;&lt;br /&gt;
    s.src = (d.location.protocol == &amp;quot;https:&amp;quot; ? &amp;quot;https:&amp;quot; : &amp;quot;http:&amp;quot;) + &amp;quot;//mc.yandex.ru/metrika/watch.js&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (w.opera == &amp;quot;[object Opera]&amp;quot;) {&lt;br /&gt;
        d.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, f, false);&lt;br /&gt;
    } else { f(); }&lt;br /&gt;
})(document, window, &amp;quot;yandex_metrika_callbacks&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=957</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=957"/>
		<updated>2014-09-26T07:30:39Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Yandex.Metrika counter --&amp;gt;&lt;br /&gt;
(function (d, w, c) {&lt;br /&gt;
    (w[c] = w[c] || []).push(function() {&lt;br /&gt;
        try {&lt;br /&gt;
            w.yaCounter4730998 = new Ya.Metrika({id:4730998,&lt;br /&gt;
                    webvisor:true,&lt;br /&gt;
                    clickmap:true,&lt;br /&gt;
                    trackLinks:true,&lt;br /&gt;
                    accurateTrackBounce:true,&lt;br /&gt;
                    trackHash:true});&lt;br /&gt;
        } catch(e) { }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    var n = d.getElementsByTagName(&amp;quot;script&amp;quot;)[0],&lt;br /&gt;
        s = d.createElement(&amp;quot;script&amp;quot;),&lt;br /&gt;
        f = function () { n.parentNode.insertBefore(s, n); };&lt;br /&gt;
    s.type = &amp;quot;text/javascript&amp;quot;;&lt;br /&gt;
    s.async = true;&lt;br /&gt;
    s.src = (d.location.protocol == &amp;quot;https:&amp;quot; ? &amp;quot;https:&amp;quot; : &amp;quot;http:&amp;quot;) + &amp;quot;//mc.yandex.ru/metrika/watch.js&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (w.opera == &amp;quot;[object Opera]&amp;quot;) {&lt;br /&gt;
        d.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, f, false);&lt;br /&gt;
    } else { f(); }&lt;br /&gt;
})(document, window, &amp;quot;yandex_metrika_callbacks&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=956</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=956"/>
		<updated>2014-09-26T07:25:50Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Yandex.Metrika informer --&amp;gt;&amp;lt;a href=&amp;quot;https://metrika.yandex.ru/stat/?id=4730998&amp;amp;amp;from=informer&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;//bs.yandex.ru/informer/4730998/3_1_FFFFFFFF_EFEFEFFF_0_pageviews&amp;quot; style=&amp;quot;width:88px; height:31px; border:0;&amp;quot; alt=&amp;quot;Яндекс.Метрика&amp;quot; title=&amp;quot;Яндекс.Метрика: данные за сегодня (просмотры, визиты и уникальные посетители)&amp;quot; onclick=&amp;quot;try{Ya.Metrika.informer({i:this,id:4730998,lang:&#039;ru&#039;});return false}catch(e){}&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;!-- /Yandex.Metrika informer --&amp;gt;&amp;lt;!-- Yandex.Metrika counter --&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter4730998 = new Ya.Metrika({id:4730998, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true, trackHash:true}); } catch(e) { } }); var n = d.getElementsByTagName(&amp;quot;script&amp;quot;)[0], s = d.createElement(&amp;quot;script&amp;quot;), f = function () { n.parentNode.insertBefore(s, n); }; s.type = &amp;quot;text/javascript&amp;quot;; s.async = true; s.src = (d.location.protocol == &amp;quot;https:&amp;quot; ? &amp;quot;https:&amp;quot; : &amp;quot;http:&amp;quot;) + &amp;quot;//mc.yandex.ru/metrika/watch.js&amp;quot;; if (w.opera == &amp;quot;[object Opera]&amp;quot;) { d.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, f, false); } else { f(); } })(document, window, &amp;quot;yandex_metrika_callbacks&amp;quot;);&amp;lt;/script&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;div&amp;gt;&amp;lt;img src=&amp;quot;//mc.yandex.ru/watch/4730998&amp;quot; style=&amp;quot;position:absolute; left:-9999px;&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/noscript&amp;gt;&amp;lt;!-- /Yandex.Metrika counter --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nlog2.png&amp;diff=739</id>
		<title>Файл:Nlog2.png</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nlog2.png&amp;diff=739"/>
		<updated>2013-10-28T11:35:13Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Alvelcom загружена новая версия «Файл:Nlog2.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;9879&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nlog2.png&amp;diff=737</id>
		<title>Файл:Nlog2.png</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nlog2.png&amp;diff=737"/>
		<updated>2013-10-28T11:29:46Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Alvelcom загружена новая версия «Файл:Nlog2.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;9879&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nlog2.png&amp;diff=736</id>
		<title>Файл:Nlog2.png</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Nlog2.png&amp;diff=736"/>
		<updated>2013-10-28T11:26:06Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: 9879&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;9879&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dijkstra_proof.png&amp;diff=734</id>
		<title>Файл:Dijkstra proof.png</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dijkstra_proof.png&amp;diff=734"/>
		<updated>2013-10-28T11:23:01Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Alvelcom загружена новая версия «Файл:Dijkstra proof.png»: Fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=307</id>
		<title>Множество и словарь. Реализация на деревьях поиска</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=307"/>
		<updated>2013-03-03T16:03:17Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Словарь на деревьях поиска в STL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;&#039;&#039;&#039;Текст этой статьи готов, но ещё не обновлены изображения.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Общие сведения ==&lt;br /&gt;
Иногда решение задачи требует применения [[АТД «Множество». Реализация на битовых векторах|абстрактного типа данных &amp;amp;laquo;Множество&amp;amp;raquo;]], однако отсутствует возможность отмечать каждое допустимое значение отдельной логической переменной (если множество имеет большую мощность или бесконечно, как, например, множество строк или вещественных чисел). В этом случае необходима такая реализация множества, которая явно хранит выбранные элементы внутри себя, а также позволяет оперативно их отыскивать, добавлять и удалять. Такие требования роднят множество с другим типом данных, именуемым словарём.&lt;br /&gt;
&lt;br /&gt;
Словарь (англ. dictionary, map) &amp;amp;mdash; абстрактный тип данных, позволяющий хранить набор значений, обращение к которым происходит по ключам. Ключи должны допускать сравнение друг с другом. Примеры словарей достаточно разнообразны:&lt;br /&gt;
&lt;br /&gt;
*Обычный толковый словарь хранит определения слов (являющиеся значениями), сопоставленные с самими словами (являющимися ключами);&lt;br /&gt;
*Банковская база данных может хранить данные клиентов, сопоставленные с номерами счетов;&lt;br /&gt;
*Экзаменационная ведомость содержит оценки, сопоставленные с фамилиями студентов, и т. д.&lt;br /&gt;
&lt;br /&gt;
Множество можно рассматривать как словарь, в котором ключ элемента совпадает с его значением. Массив можно рассматривать как словарь, в котором ключи являются целыми числами. С другой стороны, словарь можно рассматривать как массив, тип индексов которого может не быть целочисленным. Например, содержимое телефонного справочника можно рассматривать как массив телефонных номеров, индексами в котором являются фамилии абонентов. Отсюда другое название словаря &amp;amp;mdash; ассоциативный массив (англ. assotiative array).&lt;br /&gt;
&lt;br /&gt;
Как и для случая множеств, возможна такая реализация словаря, в которой каждому ключу могут быть сопоставлены несколько значений (тогда для обозначения применяется термин multimap).&lt;br /&gt;
&lt;br /&gt;
== Интерфейс ==&lt;br /&gt;
Стандартный интерфейс множества был рассмотрен в статье [[АТД «Множество». Реализация на битовых векторах#Интерфейс|&amp;amp;laquo;Множество (реализация на битовых векторах)&amp;amp;raquo;]].&lt;br /&gt;
Операции словаря похожи на операции множества, но в качестве параметров принимают ключи, а не непосредственные значения элементов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void insert(T1 key, T2 value)&amp;lt;/tt&amp;gt; || — добавление пары &amp;lt;tt&amp;gt;(key, value)&amp;lt;/tt&amp;gt; в словарь;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void remove(T1 key)&amp;lt;/tt&amp;gt;          || — исключение из словаря значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T2 find(T1 key)&amp;lt;/tt&amp;gt;              || — получение значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[http://people.ksp.sk/~kuko/bak/index.html Визуализатор древовидных структур], вкладка &amp;amp;laquo;BST&amp;amp;raquo;.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
Как упоминалось ранее, словарь должен хранить все добавленные в него пары (ключ &amp;amp;mdash; значение). Можно предложить несколько подходов к организации этой информации внутри словаря:&lt;br /&gt;
&lt;br /&gt;
*Неупорядоченный массив пар. В этом случае добавление пары в конец массива имеет сложность O(1), поиск по ключу требует просмотра всего массива (O(N)), удаление также может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Отсортированный по ключам массив пар. Добавление пары в нужное место может потребовать сдвига всех элементов (O(N)), бинарный поиск по ключу требует O(logN), удаление может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Список пар позволит производить добавление и удаление за O(1), но поиск будет требовать O(N).&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что все предложенные варианты содержат операции с линейным временем работы, которое серьёзно ограничивает область их применения. Тем не менее, возможен подход, который позволяет достичь вычислительной сложности &amp;amp;Omega;(logN) для каждой из операций. Этот подход основан на применении структур данных, называемых деревьями поиска.&lt;br /&gt;
&lt;br /&gt;
=== Определение двоичного дерева поиска ===&lt;br /&gt;
Структура, представляющая элемент односвязного списка, имела два основных поля: хранимое значение и указатель на следующую подобную структуру. Пусть число указателей в узле равно двум. Тогда каждый такой узел может иметь не более двух потомков. Пусть также хранимая информация представлена в виде пары (ключ &amp;amp;mdash; значение).&lt;br /&gt;
&lt;br /&gt;
 struct TreeNode {&lt;br /&gt;
     int key;&lt;br /&gt;
     int value;&lt;br /&gt;
     TreeNode *left, *right;&lt;br /&gt;
     TreeNode (int k, int v) {&lt;br /&gt;
        key = k;&lt;br /&gt;
        val = v;&lt;br /&gt;
        left = right = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура данных, являющаяся связной совокупностью таких узлов, называется двоичным деревом (англ. binary tree). Группа деревьев именуется лесом (англ. forest).&lt;br /&gt;
&lt;br /&gt;
Пусть вершина A указывает на вершины B и C. Тогда B и C &amp;amp;mdash; &#039;&#039;потомки&#039;&#039; A, A &amp;amp;mdash; &#039;&#039;родитель&#039;&#039; B и C. Односвязный список имеет начальный элемент; по аналогии, двоичное дерево также имеет стартовую вершину &amp;amp;mdash; &#039;&#039;корень&#039;&#039;. Из корня по указателям можно добраться до любой вершины дерева. Вершины, не имеющие потомков, называются &#039;&#039;листьями&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Когда речь идёт о двоичном дереве поиска (англ. binary search tree, BST), подразумевается дерево, на элементы которого наложены дополнительные ограничения по размещению. Мы уже сталкивались с подобным: двоичное дерево, в котором ключ вершины не меньше, чем ключи её потомков, именуется [[АТД «Очередь с приоритетами»#Определение пирамиды|пирамидой]]. В пирамиде непосредственные потомки узла являются равноправными; в двоичном дереве поиска выделяется &#039;&#039;левый потомок&#039;&#039; и &#039;&#039;правый потомок&#039;&#039;, и дополнительное ограничение сформулировано следующим образом: ключи в левом поддереве не превышают ключа в родителе, а ключи в правом поддереве больше ключа в родителе (&#039;&#039;основное свойство дерева поиска&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Поиск в двоичном дереве ===&lt;br /&gt;
Пусть имеется указатель на корень дерева &amp;lt;tt&amp;gt;TreeNode *root&amp;lt;/tt&amp;gt; и требуется найти элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Ключ &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; можно сравнить с &amp;lt;tt&amp;gt;root-&amp;gt;key&amp;lt;/tt&amp;gt;, и если повезёт, то требуемый элемент будет найден. В противном случае можно однозначно сказать, в каком из поддеревьев &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; может находиться элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;: если &amp;lt;tt&amp;gt;k &amp;lt; root-&amp;gt;key&amp;lt;/tt&amp;gt;, то его следует искать в поддереве &amp;lt;tt&amp;gt;root-&amp;gt;left&amp;lt;/tt&amp;gt;, иначе &amp;amp;mdash; в &amp;lt;tt&amp;gt;root-&amp;gt;right&amp;lt;/tt&amp;gt;. Рассматриваемое поддерево имеет все свойства исходного двоичного дерева, поэтому действия по поиску можно повторить рекурсивно. Очевидно, что поиск завершается в одном из двух случаев: либо элемент найден, либо текущее поддерево стало пустым, т. е. поиск спустился до листьев и не встретил нужного элемента.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Рекурсивная реализация: &lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Итеративная реализация:&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     if (n == NULL || k == n-&amp;gt;key)&lt;br /&gt;
         return n;&lt;br /&gt;
     if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
         return find(n-&amp;gt;left, k);&lt;br /&gt;
     else&lt;br /&gt;
         return find(n-&amp;gt;right, k);&lt;br /&gt;
 }&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     while (n != NULL &amp;amp;&amp;amp; k != n-&amp;gt;key)&lt;br /&gt;
         if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
             n = n-&amp;gt;left;&lt;br /&gt;
         else&lt;br /&gt;
             n = n-&amp;gt;right;&lt;br /&gt;
     return n;           &lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Пример функции-обёртки, которая является частью интерфейса и открыта пользователю класса. Обратите внимание на то, что поиск может завершиться неудачей, и тогда нужно возвращать такое значение, которое могло бы явно об этом сигнализировать.&lt;br /&gt;
&lt;br /&gt;
 int find(int key) {&lt;br /&gt;
     TreeNode *res = find(root, key);&lt;br /&gt;
     if (res != NULL)&lt;br /&gt;
         return res-&amp;gt;value;&lt;br /&gt;
     else&lt;br /&gt;
         return -1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Худшим случаем для операции поиска является отсутствие нужного элемента в дереве. Тогда поиск спускается от корня до листа и затем возвращает значение &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;. Будем называть &#039;&#039;высотой дерева h&#039;&#039; количество вершин (или их связей, что на единицу меньше) на самом длинном пути от корня до какого-либо из листьев. Очевидно, что сложность операции поиска составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Вставка в двоичное дерево поиска ===&lt;br /&gt;
Каждый добавляемый элемент должен располагаться на строго определённом месте, чтобы не нарушалось основное свойство двоичного дерева поиска. Найти такое место для конкретного элемента нам поможет та же идея, что была применена в реализации поиска.&lt;br /&gt;
&lt;br /&gt;
Будем идти от корня, спускаясь в те поддеревья, которые должны содержать добавляемый ключ. Когда спуск достигает значения &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, остаётся только заменить указатель на это значение указателем на новый элемент.&lt;br /&gt;
&lt;br /&gt;
 void insert(int key, int value) {&lt;br /&gt;
     if (root == NULL) {&lt;br /&gt;
         root = new TreeNode(key, value);&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     TreeNode *n = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
             if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                 n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;left;&lt;br /&gt;
             }&lt;br /&gt;
         } else {&lt;br /&gt;
             if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                 n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;right;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Таким образом, добавляемый элемент всегда становится листом двоичного дерева поиска. Достаточно очевидно, что вычислительная сложность операции вставки равна O(h).&lt;br /&gt;
&lt;br /&gt;
Порядок добавления элементов в двоичное дерево поиска играет очень важную роль. Минимальная высота двоичного дерева поиска, содержащего N элементов, равна &amp;amp;lceil;log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;N&amp;amp;rceil;; в этом случае заполнение дерева элементами равномерно, высоты поддеревьев любой вершины различаются не более чем на единицу, а само дерево именуется сбалансированным. Но существует и обратный случай, когда каждое добавление элемента увеличивает высоту дерева на 1, в результате дерево вырождается в односвязный список, а его высота становится равной N. Итоговая форма дерева зависит только от порядка добавления элементов.&lt;br /&gt;
&lt;br /&gt;
Обыкновенное двоичное дерево поиска не содержит никаких средств ограничения собственной высоты. Однако существует большое количество расширений двоичных деревьев, позволяющих поддерживать высоту на уровне O(logN), в которых, таким образом, операции поиска и добавления будут иметь сложность O(logN). Такие структуры данных называются &#039;&#039;балансирующимися деревьями&#039;&#039;. Некоторые из них описаны в разделе [[:Категория:Усложнённые структуры данных|&amp;amp;laquo;Усложнённые структуры данных&amp;amp;raquo;]].&lt;br /&gt;
&lt;br /&gt;
=== Удаление из двоичного дерева поиска ===&lt;br /&gt;
Расположение элемента, который требуется удалить, определяется тем же методом, что был использован в процедурах поиска и вставки. Однако далее возможны различные варианты действий:&lt;br /&gt;
&lt;br /&gt;
*Если удаляемый элемент является листом (не имеет потомков), то достаточно убрать ссылку на него из его родителя;&lt;br /&gt;
*Если удаляемый элемент имеет только одного потомка, то ссылка на удаляемый элемент в родителе заменяется ссылкой на этого потомка;&lt;br /&gt;
*Наконец, наиболее нетривиальной является ситуация, когда удаляемый элемент имеет двух потомков. Рассмотрим её отдельно.&lt;br /&gt;
Конечно, можно подвесить одно из поддеревьев к листу второго и далее рассматривать случай удаления узла с одним потомком, но такой подход увеличивает высоту дерева. Поэтому используется другое решение: удаляемый узел заменяется некоторым из его потомков (не обязательно непосредственных).&lt;br /&gt;
&lt;br /&gt;
Чтобы при этом не нарушилось основное свойство двоичного дерева, ключ этого потомка должен быть не меньше всех ключей левого поддерева удаляемого узла и меньше всех ключей правого поддерева удаляемого узла. Как можно догадаться, этому условию удовлетворяет только один потомок &amp;amp;mdash; узел с максимальным ключом в левом поддереве, непосредственный предшественник удаляемого узла. Найти его можно, переходя по правым ссылкам в поддереве &amp;lt;tt&amp;gt;n-&amp;gt;left&amp;lt;/tt&amp;gt;, где &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; &amp;amp;mdash; удаляемый элемент. Далее производится обмен этих узлов и уничтожение ссылки на удаляемый узел.&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что операция удаления элемента из двоичного дерева является достаточно сложной, и, кроме того, она реорганизует дерево, что в некоторых случаях является нежелательным. Поэтому часто удаление элемента заменяется присвоением ему некоторого &amp;amp;laquo;признака отсутствия&amp;amp;raquo;, который позволяет игнорировать этот элемент в операциях поиска.&lt;br /&gt;
&lt;br /&gt;
Желающие всё же могут ознакомиться здесь с примером реализации удаления элемента. Для наглядности данная процедура использует несколько вспомогательных методов.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 TreeNode *parent(TreeNode *n) {&lt;br /&gt;
     if (n == root)&lt;br /&gt;
         return NULL;&lt;br /&gt;
     TreeNode *p = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (n-&amp;gt;key &amp;lt;= p-&amp;gt;key) {&lt;br /&gt;
             if (p-&amp;gt;left-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;left;&lt;br /&gt;
         } else {&lt;br /&gt;
             if (p-&amp;gt;right-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;right;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return p;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TreeNode *predecessor(TreeNode *n) {&lt;br /&gt;
     TreeNode *l = n-&amp;gt;left;&lt;br /&gt;
     while (l-&amp;gt;right != NULL)&lt;br /&gt;
         l = l-&amp;gt;right;&lt;br /&gt;
     return l;&lt;br /&gt;
 }&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 void exclude(TreeNode *n) {&lt;br /&gt;
     TreeNode *p = parent(n);&lt;br /&gt;
     TreeNode *c = n-&amp;gt;left ? n-&amp;gt;left : n-&amp;gt;right;&lt;br /&gt;
     if (p == NULL)&lt;br /&gt;
         root = c;&lt;br /&gt;
     else if (p-&amp;gt;left == n)&lt;br /&gt;
         p-&amp;gt;left = c;&lt;br /&gt;
     else&lt;br /&gt;
         p-&amp;gt;right = c;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void remove(int key) {&lt;br /&gt;
     TreeNode *n = find(key, root);&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     if (n-&amp;gt;left &amp;amp;&amp;amp; n-&amp;gt;right) {&lt;br /&gt;
         TreeNode *pred = predecessor(n);&lt;br /&gt;
         n-&amp;gt;key = pred-&amp;gt;key;&lt;br /&gt;
         n-&amp;gt;value = pred-&amp;gt;value;&lt;br /&gt;
         n = pred;&lt;br /&gt;
     }&lt;br /&gt;
     exclude(n);&lt;br /&gt;
     delete n;&lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt; принимает указатель на узел &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, имеющий не более одного непосредственного потомка, определяет для этого узла его родителя &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; (с помощью функции &amp;lt;tt&amp;gt;parent()&amp;lt;/tt&amp;gt;) и потомка &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt;, а затем исправляет ссылку (&amp;lt;tt&amp;gt;p =&amp;gt; n&amp;lt;/tt&amp;gt;) на (&amp;lt;tt&amp;gt;p =&amp;gt; с&amp;lt;/tt&amp;gt;), исключая, таким образом, &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; из дерева поиска.&lt;br /&gt;
&lt;br /&gt;
Таким образом, первые два случая удаления обрабатываются за счёт функции &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;. Если же удаляемый узел имеет двух потомком, то с помощью метода &amp;lt;tt&amp;gt;predecessor()&amp;lt;/tt&amp;gt; определяется его непосредственный предшественник, его данные копируются на место удаляемого узла, а ссылка на удаляемый узел перемещается на предшественника. Теперь удаляемый узел вновь имеет не более 1 потомка и может быть обработан методом &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Операция удаления требует определения родителя элемента, в отдельных случаях &amp;amp;mdash; отыскания предшественника, а также ещё O(1) действий. Итоговая вычислительная сложность составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивный обход двоичного дерева поиска ===&lt;br /&gt;
Пусть требуется посетить все элементы двоичного дерева (например, чтобы вывести их). Приведём простую рекурсивную процедуру, решающую данную задачу:&lt;br /&gt;
&lt;br /&gt;
 void traverse(TreeNode *n) {&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     traverse(n-&amp;gt;left);&lt;br /&gt;
     printf(&amp;quot;%d&amp;quot;, n-&amp;gt;value);&lt;br /&gt;
     traverse(n-&amp;gt;right);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Обход запускается вызовом &amp;lt;tt&amp;gt;traverse(root)&amp;lt;/tt&amp;gt;. Приведённая реализация обесцвечивает сначала посещение всех узлом, ключи которых не превышают ключа данного узла, затем посещение самого узла, затем посещение всех узлов, ключи которых больше ключа данного узла. Индуктивным рассуждением можно доказать, что данный обход выводит все элементы дерева в порядке увеличения их ключей.&lt;br /&gt;
&lt;br /&gt;
Данный обход (левое поддерево &amp;amp;mdash; родитель &amp;amp;mdash; правое поддерево) является лишь одним из шести возможных. На иллюстрации приведены результаты каждого типа обхода для одного и того же дерева.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён код реализации словаря на двоичном дереве поиска. Ключами и значениями являются целые числа. Операция удаления опущена.&lt;br /&gt;
&lt;br /&gt;
 class Map {&lt;br /&gt;
 &lt;br /&gt;
     struct TreeNode {&lt;br /&gt;
         int key;&lt;br /&gt;
         int value;&lt;br /&gt;
         TreeNode *left, *right;&lt;br /&gt;
         TreeNode (int k, int v) {&lt;br /&gt;
             key = k;&lt;br /&gt;
             val = v;&lt;br /&gt;
             left = right = NULL;&lt;br /&gt;
         } &lt;br /&gt;
     } root;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
  &lt;br /&gt;
     Map() {&lt;br /&gt;
         root = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int find(int key) {&lt;br /&gt;
         TreeNode *res = root;&lt;br /&gt;
         while (res != NULL &amp;amp;&amp;amp; res-&amp;gt;key != key)&lt;br /&gt;
             res = res-&amp;gt;key &amp;lt; key ? res-&amp;gt;left : res-&amp;gt;right;&lt;br /&gt;
         return res ? res-&amp;gt;value : -1;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void insert(int key, int value) {&lt;br /&gt;
         if (root == NULL) {&lt;br /&gt;
             root = new TreeNode(key, value);&lt;br /&gt;
             return;&lt;br /&gt;
         }&lt;br /&gt;
         TreeNode *n = root;&lt;br /&gt;
         while (true) {&lt;br /&gt;
             if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
                 if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                     n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                     return;&lt;br /&gt;
                 } else {&lt;br /&gt;
                     n = n-&amp;gt;left;&lt;br /&gt;
                 }&lt;br /&gt;
             } else {&lt;br /&gt;
                 if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                     n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                     return;&lt;br /&gt;
                 } else {&lt;br /&gt;
                     n = n-&amp;gt;right;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Некоторые вопросы для размышления:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Как может выглядеть рекурсивная реализация вставки и удаления элемента двоичного дерева поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как реализовать отыскание максимума (минимума) в двоичном дереве поиска? Можно ли организовать очередь с приоритетами на двоичном дереве поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как, в общем случае, реализовать операции поиска элемента, предшествующего данному, и элемента, следующего за данным?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Множество на деревьях поиска в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;set&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;set&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;. В том же заголовочном файле описан шаблон &amp;lt;tt&amp;gt;multiset&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;, представляющий множество, в котором могут храниться несколько одинаковых значений. Оба шаблона реализованы на балансирующихся двоичных деревьях поиска.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;set&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     set&amp;lt;int&amp;gt; s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.insert(i * i);&lt;br /&gt;
     for (int i = 0; i &amp;lt; 30; i++) {&lt;br /&gt;
         if (s.find(i) != s.end())&lt;br /&gt;
             cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
     return 0;       //результат &amp;quot;1 4 9 16 25&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для множества (тип &amp;lt;tt&amp;gt;It&amp;lt;/tt&amp;gt; обозначает итератор, тип &amp;lt;tt&amp;gt;size_t&amp;lt;/tt&amp;gt; &amp;amp;mdash; беззнаковое целое):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;set&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;                       || — конструктор множества; поддерживается инициализация парой итераторов;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, bool&amp;gt; insert(T x);&amp;lt;/tt&amp;gt;    || — добавление значения &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в множество. Метод возвращает пару, первый элемент которой указывает на элемент со значением &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;, а второй равен &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;, если элемент был добавлен, либо &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;, если такой элемент уже был в множестве. Эквивалент этого метода для шаблона &amp;lt;tt&amp;gt;multiset&amp;lt;/tt&amp;gt; возвращает только итератор, указывающий на добавленный элемент;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t erase(T x);&amp;lt;/tt&amp;gt;             || — исключение значения &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; из множества. Возвращает количество исключённых элементов. Метод также поддерживает удаление элемента на определённой позиции, если передать ему не значение, а итератор (или пару итераторов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It find(T x);&amp;lt;/tt&amp;gt;                  || — поиск элемента &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в множестве. Метод возвращает итератор, указывающий на найденный элемент, либо итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;, если элемент не был найден;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t count(T x);&amp;lt;/tt&amp;gt;             || — подсчёт количества элементов, равных &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size();&amp;lt;/tt&amp;gt;                 || — получение количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t max_size();&amp;lt;/tt&amp;gt;             || — получение максимального возможного (для данного компьютера и реализации STL) количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty();&amp;lt;/tt&amp;gt;                  || — проверка множества на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void clear();&amp;lt;/tt&amp;gt;                  || — очистка множества (исключение всех элементов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It lower_bound(T x);&amp;lt;/tt&amp;gt;           || — получение итератора, указывающего на минимальный элемент, не меньший &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Если такого элемента нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;tt&amp;gt;It upper_bound(T x);&amp;lt;/tt&amp;gt;           || — получение итератора, указывающего на минимальный элемент, больший &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Если такого элемента нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, It&amp;gt; equal_range(T x)&amp;lt;/tt&amp;gt; || — получение пары итераторов, аналогичных результатам двух описанных выше методов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Элементы внутри &amp;lt;tt&amp;gt;set&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;multiset&amp;lt;/tt&amp;gt; являются упорядоченными по возрастанию.&lt;br /&gt;
&lt;br /&gt;
== Словарь на деревьях поиска в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;map&amp;lt;T1, T2&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;map&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;. В том же заголовочном файле описан шаблон &amp;lt;tt&amp;gt;multimap&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;, представляющий словарь, в котором могут храниться несколько пар с одинаковыми ключами. Оба шаблона реализованы на балансирующихся двоичных деревьях поиска.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 #include &amp;lt;map&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     map&amp;lt;int, string&amp;gt; m;&lt;br /&gt;
     m.insert(make_pair(1828, &amp;quot;Tolstoy&amp;quot;));  &lt;br /&gt;
     m.insert(make_pair(1799, &amp;quot;Pushkin&amp;quot;));&lt;br /&gt;
     m.insert(make_pair(1821, &amp;quot;Dostoevsky&amp;quot;));&lt;br /&gt;
     map&amp;lt;int, string&amp;gt;::iterator it, end;&lt;br /&gt;
     it  = m.lower_bound(1750);&lt;br /&gt;
     end = m.upper_bound(1850);&lt;br /&gt;
     for (; it != end; it++) {&lt;br /&gt;
        cout &amp;lt;&amp;lt; it-&amp;gt;second &amp;lt;&amp;lt; &amp;quot;(&amp;quot; &amp;lt;&amp;lt; it-&amp;gt;first &amp;lt;&amp;lt; &amp;quot;) &amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     return 0;       //результат &amp;quot;Pushkin (1799) Dostoevsky (1821) Tolstoy (1828) &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для множества (тип &amp;lt;tt&amp;gt;It&amp;lt;/tt&amp;gt; обозначает итератор, тип &amp;lt;tt&amp;gt;size_t&amp;lt;/tt&amp;gt; &amp;amp;mdash; беззнаковое целое):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;map&amp;lt;T1, T2&amp;gt;()&amp;lt;/tt&amp;gt;                  || — конструктор словаря. Типом ключей является &amp;lt;tt&amp;gt;T1&amp;lt;/tt&amp;gt;, типом значений &amp;amp;mdash; &amp;lt;tt&amp;gt;T2&amp;lt;/tt&amp;gt;. Поддерживается инициализация парой итераторов;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, bool&amp;gt; insert(pair&amp;lt;T1, T2&amp;gt; x);&amp;lt;/tt&amp;gt;    || — добавление пары &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в словарь. Метод принимает именно пару (которая может быть создана методом &amp;lt;tt&amp;gt;std::make_pair()&amp;lt;/tt&amp;gt;), а не два отдельных аргумента. Операция вставки возвращает пару, аналогичную возвращаемой методом &amp;lt;tt&amp;gt;set::insert()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t erase(T1 k);&amp;lt;/tt&amp;gt;            || — исключение из словаря элементов с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Возвращает количество исключённых элементов. Метод также поддерживает удаление элемента на определённой позиции, если передать ему не значение, а итератор (или пару итераторов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It find(T1 k);&amp;lt;/tt&amp;gt;                 || — поиск элемента с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; в словаре. Метод возвращает итератор, указывающий на найденную пару (именно пару, обратите на это внимание), либо итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;, если элемент не был найден;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t count(T1 k);&amp;lt;/tt&amp;gt;            || — подсчёт количества пар, ключи которых равны &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size();&amp;lt;/tt&amp;gt;                 || — получение количества пар в словаре;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t max_size(;&amp;lt;/tt&amp;gt;              || — получение максимального возможного (для данного компьютера и реализации STL) количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty();&amp;lt;/tt&amp;gt;                  || — проверка словаря на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void clear();&amp;lt;/tt&amp;gt;                  || — очистка словаря (исключение всех элементов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It lower_bound(T1 k);&amp;lt;/tt&amp;gt;          || — получение итератора, указывающего на пару с минимальным ключом, не меньшим &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Если такой пары нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;tt&amp;gt;It upper_bound(T1 k);&amp;lt;/tt&amp;gt;          || — получение итератора, указывающего на пару с минимальным ключом, большим &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Если такой пары нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, It&amp;gt; equal_range(T1 k)&amp;lt;/tt&amp;gt; || — получение пары итераторов, аналогичных результатам двух описанных выше методов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Элементы внутри &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;multimap&amp;lt;/tt&amp;gt; упорядочены по возрастанию ключей.&lt;br /&gt;
&lt;br /&gt;
[[Category:Базовые структуры данных и АТД]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=306</id>
		<title>Множество и словарь. Реализация на деревьях поиска</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=306"/>
		<updated>2013-03-03T16:03:05Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Словарь на деревьях поиска в STL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;&#039;&#039;&#039;Текст этой статьи готов, но ещё не обновлены изображения.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Общие сведения ==&lt;br /&gt;
Иногда решение задачи требует применения [[АТД «Множество». Реализация на битовых векторах|абстрактного типа данных &amp;amp;laquo;Множество&amp;amp;raquo;]], однако отсутствует возможность отмечать каждое допустимое значение отдельной логической переменной (если множество имеет большую мощность или бесконечно, как, например, множество строк или вещественных чисел). В этом случае необходима такая реализация множества, которая явно хранит выбранные элементы внутри себя, а также позволяет оперативно их отыскивать, добавлять и удалять. Такие требования роднят множество с другим типом данных, именуемым словарём.&lt;br /&gt;
&lt;br /&gt;
Словарь (англ. dictionary, map) &amp;amp;mdash; абстрактный тип данных, позволяющий хранить набор значений, обращение к которым происходит по ключам. Ключи должны допускать сравнение друг с другом. Примеры словарей достаточно разнообразны:&lt;br /&gt;
&lt;br /&gt;
*Обычный толковый словарь хранит определения слов (являющиеся значениями), сопоставленные с самими словами (являющимися ключами);&lt;br /&gt;
*Банковская база данных может хранить данные клиентов, сопоставленные с номерами счетов;&lt;br /&gt;
*Экзаменационная ведомость содержит оценки, сопоставленные с фамилиями студентов, и т. д.&lt;br /&gt;
&lt;br /&gt;
Множество можно рассматривать как словарь, в котором ключ элемента совпадает с его значением. Массив можно рассматривать как словарь, в котором ключи являются целыми числами. С другой стороны, словарь можно рассматривать как массив, тип индексов которого может не быть целочисленным. Например, содержимое телефонного справочника можно рассматривать как массив телефонных номеров, индексами в котором являются фамилии абонентов. Отсюда другое название словаря &amp;amp;mdash; ассоциативный массив (англ. assotiative array).&lt;br /&gt;
&lt;br /&gt;
Как и для случая множеств, возможна такая реализация словаря, в которой каждому ключу могут быть сопоставлены несколько значений (тогда для обозначения применяется термин multimap).&lt;br /&gt;
&lt;br /&gt;
== Интерфейс ==&lt;br /&gt;
Стандартный интерфейс множества был рассмотрен в статье [[АТД «Множество». Реализация на битовых векторах#Интерфейс|&amp;amp;laquo;Множество (реализация на битовых векторах)&amp;amp;raquo;]].&lt;br /&gt;
Операции словаря похожи на операции множества, но в качестве параметров принимают ключи, а не непосредственные значения элементов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void insert(T1 key, T2 value)&amp;lt;/tt&amp;gt; || — добавление пары &amp;lt;tt&amp;gt;(key, value)&amp;lt;/tt&amp;gt; в словарь;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void remove(T1 key)&amp;lt;/tt&amp;gt;          || — исключение из словаря значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T2 find(T1 key)&amp;lt;/tt&amp;gt;              || — получение значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[http://people.ksp.sk/~kuko/bak/index.html Визуализатор древовидных структур], вкладка &amp;amp;laquo;BST&amp;amp;raquo;.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
Как упоминалось ранее, словарь должен хранить все добавленные в него пары (ключ &amp;amp;mdash; значение). Можно предложить несколько подходов к организации этой информации внутри словаря:&lt;br /&gt;
&lt;br /&gt;
*Неупорядоченный массив пар. В этом случае добавление пары в конец массива имеет сложность O(1), поиск по ключу требует просмотра всего массива (O(N)), удаление также может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Отсортированный по ключам массив пар. Добавление пары в нужное место может потребовать сдвига всех элементов (O(N)), бинарный поиск по ключу требует O(logN), удаление может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Список пар позволит производить добавление и удаление за O(1), но поиск будет требовать O(N).&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что все предложенные варианты содержат операции с линейным временем работы, которое серьёзно ограничивает область их применения. Тем не менее, возможен подход, который позволяет достичь вычислительной сложности &amp;amp;Omega;(logN) для каждой из операций. Этот подход основан на применении структур данных, называемых деревьями поиска.&lt;br /&gt;
&lt;br /&gt;
=== Определение двоичного дерева поиска ===&lt;br /&gt;
Структура, представляющая элемент односвязного списка, имела два основных поля: хранимое значение и указатель на следующую подобную структуру. Пусть число указателей в узле равно двум. Тогда каждый такой узел может иметь не более двух потомков. Пусть также хранимая информация представлена в виде пары (ключ &amp;amp;mdash; значение).&lt;br /&gt;
&lt;br /&gt;
 struct TreeNode {&lt;br /&gt;
     int key;&lt;br /&gt;
     int value;&lt;br /&gt;
     TreeNode *left, *right;&lt;br /&gt;
     TreeNode (int k, int v) {&lt;br /&gt;
        key = k;&lt;br /&gt;
        val = v;&lt;br /&gt;
        left = right = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура данных, являющаяся связной совокупностью таких узлов, называется двоичным деревом (англ. binary tree). Группа деревьев именуется лесом (англ. forest).&lt;br /&gt;
&lt;br /&gt;
Пусть вершина A указывает на вершины B и C. Тогда B и C &amp;amp;mdash; &#039;&#039;потомки&#039;&#039; A, A &amp;amp;mdash; &#039;&#039;родитель&#039;&#039; B и C. Односвязный список имеет начальный элемент; по аналогии, двоичное дерево также имеет стартовую вершину &amp;amp;mdash; &#039;&#039;корень&#039;&#039;. Из корня по указателям можно добраться до любой вершины дерева. Вершины, не имеющие потомков, называются &#039;&#039;листьями&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Когда речь идёт о двоичном дереве поиска (англ. binary search tree, BST), подразумевается дерево, на элементы которого наложены дополнительные ограничения по размещению. Мы уже сталкивались с подобным: двоичное дерево, в котором ключ вершины не меньше, чем ключи её потомков, именуется [[АТД «Очередь с приоритетами»#Определение пирамиды|пирамидой]]. В пирамиде непосредственные потомки узла являются равноправными; в двоичном дереве поиска выделяется &#039;&#039;левый потомок&#039;&#039; и &#039;&#039;правый потомок&#039;&#039;, и дополнительное ограничение сформулировано следующим образом: ключи в левом поддереве не превышают ключа в родителе, а ключи в правом поддереве больше ключа в родителе (&#039;&#039;основное свойство дерева поиска&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Поиск в двоичном дереве ===&lt;br /&gt;
Пусть имеется указатель на корень дерева &amp;lt;tt&amp;gt;TreeNode *root&amp;lt;/tt&amp;gt; и требуется найти элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Ключ &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; можно сравнить с &amp;lt;tt&amp;gt;root-&amp;gt;key&amp;lt;/tt&amp;gt;, и если повезёт, то требуемый элемент будет найден. В противном случае можно однозначно сказать, в каком из поддеревьев &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; может находиться элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;: если &amp;lt;tt&amp;gt;k &amp;lt; root-&amp;gt;key&amp;lt;/tt&amp;gt;, то его следует искать в поддереве &amp;lt;tt&amp;gt;root-&amp;gt;left&amp;lt;/tt&amp;gt;, иначе &amp;amp;mdash; в &amp;lt;tt&amp;gt;root-&amp;gt;right&amp;lt;/tt&amp;gt;. Рассматриваемое поддерево имеет все свойства исходного двоичного дерева, поэтому действия по поиску можно повторить рекурсивно. Очевидно, что поиск завершается в одном из двух случаев: либо элемент найден, либо текущее поддерево стало пустым, т. е. поиск спустился до листьев и не встретил нужного элемента.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Рекурсивная реализация: &lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Итеративная реализация:&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     if (n == NULL || k == n-&amp;gt;key)&lt;br /&gt;
         return n;&lt;br /&gt;
     if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
         return find(n-&amp;gt;left, k);&lt;br /&gt;
     else&lt;br /&gt;
         return find(n-&amp;gt;right, k);&lt;br /&gt;
 }&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     while (n != NULL &amp;amp;&amp;amp; k != n-&amp;gt;key)&lt;br /&gt;
         if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
             n = n-&amp;gt;left;&lt;br /&gt;
         else&lt;br /&gt;
             n = n-&amp;gt;right;&lt;br /&gt;
     return n;           &lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Пример функции-обёртки, которая является частью интерфейса и открыта пользователю класса. Обратите внимание на то, что поиск может завершиться неудачей, и тогда нужно возвращать такое значение, которое могло бы явно об этом сигнализировать.&lt;br /&gt;
&lt;br /&gt;
 int find(int key) {&lt;br /&gt;
     TreeNode *res = find(root, key);&lt;br /&gt;
     if (res != NULL)&lt;br /&gt;
         return res-&amp;gt;value;&lt;br /&gt;
     else&lt;br /&gt;
         return -1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Худшим случаем для операции поиска является отсутствие нужного элемента в дереве. Тогда поиск спускается от корня до листа и затем возвращает значение &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;. Будем называть &#039;&#039;высотой дерева h&#039;&#039; количество вершин (или их связей, что на единицу меньше) на самом длинном пути от корня до какого-либо из листьев. Очевидно, что сложность операции поиска составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Вставка в двоичное дерево поиска ===&lt;br /&gt;
Каждый добавляемый элемент должен располагаться на строго определённом месте, чтобы не нарушалось основное свойство двоичного дерева поиска. Найти такое место для конкретного элемента нам поможет та же идея, что была применена в реализации поиска.&lt;br /&gt;
&lt;br /&gt;
Будем идти от корня, спускаясь в те поддеревья, которые должны содержать добавляемый ключ. Когда спуск достигает значения &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, остаётся только заменить указатель на это значение указателем на новый элемент.&lt;br /&gt;
&lt;br /&gt;
 void insert(int key, int value) {&lt;br /&gt;
     if (root == NULL) {&lt;br /&gt;
         root = new TreeNode(key, value);&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     TreeNode *n = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
             if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                 n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;left;&lt;br /&gt;
             }&lt;br /&gt;
         } else {&lt;br /&gt;
             if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                 n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;right;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Таким образом, добавляемый элемент всегда становится листом двоичного дерева поиска. Достаточно очевидно, что вычислительная сложность операции вставки равна O(h).&lt;br /&gt;
&lt;br /&gt;
Порядок добавления элементов в двоичное дерево поиска играет очень важную роль. Минимальная высота двоичного дерева поиска, содержащего N элементов, равна &amp;amp;lceil;log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;N&amp;amp;rceil;; в этом случае заполнение дерева элементами равномерно, высоты поддеревьев любой вершины различаются не более чем на единицу, а само дерево именуется сбалансированным. Но существует и обратный случай, когда каждое добавление элемента увеличивает высоту дерева на 1, в результате дерево вырождается в односвязный список, а его высота становится равной N. Итоговая форма дерева зависит только от порядка добавления элементов.&lt;br /&gt;
&lt;br /&gt;
Обыкновенное двоичное дерево поиска не содержит никаких средств ограничения собственной высоты. Однако существует большое количество расширений двоичных деревьев, позволяющих поддерживать высоту на уровне O(logN), в которых, таким образом, операции поиска и добавления будут иметь сложность O(logN). Такие структуры данных называются &#039;&#039;балансирующимися деревьями&#039;&#039;. Некоторые из них описаны в разделе [[:Категория:Усложнённые структуры данных|&amp;amp;laquo;Усложнённые структуры данных&amp;amp;raquo;]].&lt;br /&gt;
&lt;br /&gt;
=== Удаление из двоичного дерева поиска ===&lt;br /&gt;
Расположение элемента, который требуется удалить, определяется тем же методом, что был использован в процедурах поиска и вставки. Однако далее возможны различные варианты действий:&lt;br /&gt;
&lt;br /&gt;
*Если удаляемый элемент является листом (не имеет потомков), то достаточно убрать ссылку на него из его родителя;&lt;br /&gt;
*Если удаляемый элемент имеет только одного потомка, то ссылка на удаляемый элемент в родителе заменяется ссылкой на этого потомка;&lt;br /&gt;
*Наконец, наиболее нетривиальной является ситуация, когда удаляемый элемент имеет двух потомков. Рассмотрим её отдельно.&lt;br /&gt;
Конечно, можно подвесить одно из поддеревьев к листу второго и далее рассматривать случай удаления узла с одним потомком, но такой подход увеличивает высоту дерева. Поэтому используется другое решение: удаляемый узел заменяется некоторым из его потомков (не обязательно непосредственных).&lt;br /&gt;
&lt;br /&gt;
Чтобы при этом не нарушилось основное свойство двоичного дерева, ключ этого потомка должен быть не меньше всех ключей левого поддерева удаляемого узла и меньше всех ключей правого поддерева удаляемого узла. Как можно догадаться, этому условию удовлетворяет только один потомок &amp;amp;mdash; узел с максимальным ключом в левом поддереве, непосредственный предшественник удаляемого узла. Найти его можно, переходя по правым ссылкам в поддереве &amp;lt;tt&amp;gt;n-&amp;gt;left&amp;lt;/tt&amp;gt;, где &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; &amp;amp;mdash; удаляемый элемент. Далее производится обмен этих узлов и уничтожение ссылки на удаляемый узел.&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что операция удаления элемента из двоичного дерева является достаточно сложной, и, кроме того, она реорганизует дерево, что в некоторых случаях является нежелательным. Поэтому часто удаление элемента заменяется присвоением ему некоторого &amp;amp;laquo;признака отсутствия&amp;amp;raquo;, который позволяет игнорировать этот элемент в операциях поиска.&lt;br /&gt;
&lt;br /&gt;
Желающие всё же могут ознакомиться здесь с примером реализации удаления элемента. Для наглядности данная процедура использует несколько вспомогательных методов.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 TreeNode *parent(TreeNode *n) {&lt;br /&gt;
     if (n == root)&lt;br /&gt;
         return NULL;&lt;br /&gt;
     TreeNode *p = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (n-&amp;gt;key &amp;lt;= p-&amp;gt;key) {&lt;br /&gt;
             if (p-&amp;gt;left-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;left;&lt;br /&gt;
         } else {&lt;br /&gt;
             if (p-&amp;gt;right-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;right;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return p;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TreeNode *predecessor(TreeNode *n) {&lt;br /&gt;
     TreeNode *l = n-&amp;gt;left;&lt;br /&gt;
     while (l-&amp;gt;right != NULL)&lt;br /&gt;
         l = l-&amp;gt;right;&lt;br /&gt;
     return l;&lt;br /&gt;
 }&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 void exclude(TreeNode *n) {&lt;br /&gt;
     TreeNode *p = parent(n);&lt;br /&gt;
     TreeNode *c = n-&amp;gt;left ? n-&amp;gt;left : n-&amp;gt;right;&lt;br /&gt;
     if (p == NULL)&lt;br /&gt;
         root = c;&lt;br /&gt;
     else if (p-&amp;gt;left == n)&lt;br /&gt;
         p-&amp;gt;left = c;&lt;br /&gt;
     else&lt;br /&gt;
         p-&amp;gt;right = c;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void remove(int key) {&lt;br /&gt;
     TreeNode *n = find(key, root);&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     if (n-&amp;gt;left &amp;amp;&amp;amp; n-&amp;gt;right) {&lt;br /&gt;
         TreeNode *pred = predecessor(n);&lt;br /&gt;
         n-&amp;gt;key = pred-&amp;gt;key;&lt;br /&gt;
         n-&amp;gt;value = pred-&amp;gt;value;&lt;br /&gt;
         n = pred;&lt;br /&gt;
     }&lt;br /&gt;
     exclude(n);&lt;br /&gt;
     delete n;&lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt; принимает указатель на узел &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, имеющий не более одного непосредственного потомка, определяет для этого узла его родителя &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; (с помощью функции &amp;lt;tt&amp;gt;parent()&amp;lt;/tt&amp;gt;) и потомка &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt;, а затем исправляет ссылку (&amp;lt;tt&amp;gt;p =&amp;gt; n&amp;lt;/tt&amp;gt;) на (&amp;lt;tt&amp;gt;p =&amp;gt; с&amp;lt;/tt&amp;gt;), исключая, таким образом, &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; из дерева поиска.&lt;br /&gt;
&lt;br /&gt;
Таким образом, первые два случая удаления обрабатываются за счёт функции &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;. Если же удаляемый узел имеет двух потомком, то с помощью метода &amp;lt;tt&amp;gt;predecessor()&amp;lt;/tt&amp;gt; определяется его непосредственный предшественник, его данные копируются на место удаляемого узла, а ссылка на удаляемый узел перемещается на предшественника. Теперь удаляемый узел вновь имеет не более 1 потомка и может быть обработан методом &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Операция удаления требует определения родителя элемента, в отдельных случаях &amp;amp;mdash; отыскания предшественника, а также ещё O(1) действий. Итоговая вычислительная сложность составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивный обход двоичного дерева поиска ===&lt;br /&gt;
Пусть требуется посетить все элементы двоичного дерева (например, чтобы вывести их). Приведём простую рекурсивную процедуру, решающую данную задачу:&lt;br /&gt;
&lt;br /&gt;
 void traverse(TreeNode *n) {&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     traverse(n-&amp;gt;left);&lt;br /&gt;
     printf(&amp;quot;%d&amp;quot;, n-&amp;gt;value);&lt;br /&gt;
     traverse(n-&amp;gt;right);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Обход запускается вызовом &amp;lt;tt&amp;gt;traverse(root)&amp;lt;/tt&amp;gt;. Приведённая реализация обесцвечивает сначала посещение всех узлом, ключи которых не превышают ключа данного узла, затем посещение самого узла, затем посещение всех узлов, ключи которых больше ключа данного узла. Индуктивным рассуждением можно доказать, что данный обход выводит все элементы дерева в порядке увеличения их ключей.&lt;br /&gt;
&lt;br /&gt;
Данный обход (левое поддерево &amp;amp;mdash; родитель &amp;amp;mdash; правое поддерево) является лишь одним из шести возможных. На иллюстрации приведены результаты каждого типа обхода для одного и того же дерева.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён код реализации словаря на двоичном дереве поиска. Ключами и значениями являются целые числа. Операция удаления опущена.&lt;br /&gt;
&lt;br /&gt;
 class Map {&lt;br /&gt;
 &lt;br /&gt;
     struct TreeNode {&lt;br /&gt;
         int key;&lt;br /&gt;
         int value;&lt;br /&gt;
         TreeNode *left, *right;&lt;br /&gt;
         TreeNode (int k, int v) {&lt;br /&gt;
             key = k;&lt;br /&gt;
             val = v;&lt;br /&gt;
             left = right = NULL;&lt;br /&gt;
         } &lt;br /&gt;
     } root;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
  &lt;br /&gt;
     Map() {&lt;br /&gt;
         root = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int find(int key) {&lt;br /&gt;
         TreeNode *res = root;&lt;br /&gt;
         while (res != NULL &amp;amp;&amp;amp; res-&amp;gt;key != key)&lt;br /&gt;
             res = res-&amp;gt;key &amp;lt; key ? res-&amp;gt;left : res-&amp;gt;right;&lt;br /&gt;
         return res ? res-&amp;gt;value : -1;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void insert(int key, int value) {&lt;br /&gt;
         if (root == NULL) {&lt;br /&gt;
             root = new TreeNode(key, value);&lt;br /&gt;
             return;&lt;br /&gt;
         }&lt;br /&gt;
         TreeNode *n = root;&lt;br /&gt;
         while (true) {&lt;br /&gt;
             if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
                 if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                     n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                     return;&lt;br /&gt;
                 } else {&lt;br /&gt;
                     n = n-&amp;gt;left;&lt;br /&gt;
                 }&lt;br /&gt;
             } else {&lt;br /&gt;
                 if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                     n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                     return;&lt;br /&gt;
                 } else {&lt;br /&gt;
                     n = n-&amp;gt;right;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Некоторые вопросы для размышления:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Как может выглядеть рекурсивная реализация вставки и удаления элемента двоичного дерева поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как реализовать отыскание максимума (минимума) в двоичном дереве поиска? Можно ли организовать очередь с приоритетами на двоичном дереве поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как, в общем случае, реализовать операции поиска элемента, предшествующего данному, и элемента, следующего за данным?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Множество на деревьях поиска в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;set&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;set&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;. В том же заголовочном файле описан шаблон &amp;lt;tt&amp;gt;multiset&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;, представляющий множество, в котором могут храниться несколько одинаковых значений. Оба шаблона реализованы на балансирующихся двоичных деревьях поиска.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;set&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     set&amp;lt;int&amp;gt; s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.insert(i * i);&lt;br /&gt;
     for (int i = 0; i &amp;lt; 30; i++) {&lt;br /&gt;
         if (s.find(i) != s.end())&lt;br /&gt;
             cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
     return 0;       //результат &amp;quot;1 4 9 16 25&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для множества (тип &amp;lt;tt&amp;gt;It&amp;lt;/tt&amp;gt; обозначает итератор, тип &amp;lt;tt&amp;gt;size_t&amp;lt;/tt&amp;gt; &amp;amp;mdash; беззнаковое целое):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;set&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;                       || — конструктор множества; поддерживается инициализация парой итераторов;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, bool&amp;gt; insert(T x);&amp;lt;/tt&amp;gt;    || — добавление значения &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в множество. Метод возвращает пару, первый элемент которой указывает на элемент со значением &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;, а второй равен &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;, если элемент был добавлен, либо &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;, если такой элемент уже был в множестве. Эквивалент этого метода для шаблона &amp;lt;tt&amp;gt;multiset&amp;lt;/tt&amp;gt; возвращает только итератор, указывающий на добавленный элемент;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t erase(T x);&amp;lt;/tt&amp;gt;             || — исключение значения &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; из множества. Возвращает количество исключённых элементов. Метод также поддерживает удаление элемента на определённой позиции, если передать ему не значение, а итератор (или пару итераторов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It find(T x);&amp;lt;/tt&amp;gt;                  || — поиск элемента &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в множестве. Метод возвращает итератор, указывающий на найденный элемент, либо итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;, если элемент не был найден;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t count(T x);&amp;lt;/tt&amp;gt;             || — подсчёт количества элементов, равных &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size();&amp;lt;/tt&amp;gt;                 || — получение количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t max_size();&amp;lt;/tt&amp;gt;             || — получение максимального возможного (для данного компьютера и реализации STL) количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty();&amp;lt;/tt&amp;gt;                  || — проверка множества на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void clear();&amp;lt;/tt&amp;gt;                  || — очистка множества (исключение всех элементов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It lower_bound(T x);&amp;lt;/tt&amp;gt;           || — получение итератора, указывающего на минимальный элемент, не меньший &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Если такого элемента нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;tt&amp;gt;It upper_bound(T x);&amp;lt;/tt&amp;gt;           || — получение итератора, указывающего на минимальный элемент, больший &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Если такого элемента нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, It&amp;gt; equal_range(T x)&amp;lt;/tt&amp;gt; || — получение пары итераторов, аналогичных результатам двух описанных выше методов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Элементы внутри &amp;lt;tt&amp;gt;set&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;multiset&amp;lt;/tt&amp;gt; являются упорядоченными по возрастанию.&lt;br /&gt;
&lt;br /&gt;
== Словарь на деревьях поиска в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;map&amp;lt;T1, T2&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;map&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;. В том же заголовочном файле описан шаблон &amp;lt;tt&amp;gt;multimap&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;, представляющий словарь, в котором могут храниться несколько пар с одинаковыми ключами. Оба шаблона реализованы на балансирующихся двоичных деревьях поиска.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 #include &amp;lt;map&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     map&amp;lt;int, string&amp;gt; m;&lt;br /&gt;
     m.insert(make_pair(1828, &amp;quot;Tolstoy&amp;quot;));  &lt;br /&gt;
     m.insert(make_pair(1799, &amp;quot;Pushkin&amp;quot;));&lt;br /&gt;
     m.insert(make_pair(1821, &amp;quot;Dostoevsky&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
     map&amp;lt;int, string&amp;gt;::iterator it, end;&lt;br /&gt;
     it  = m.lower_bound(1750);&lt;br /&gt;
     end = m.upper_bound(1850);&lt;br /&gt;
     for (; it != end; it++) {&lt;br /&gt;
        cout &amp;lt;&amp;lt; it-&amp;gt;second &amp;lt;&amp;lt; &amp;quot;(&amp;quot; &amp;lt;&amp;lt; it-&amp;gt;first &amp;lt;&amp;lt; &amp;quot;) &amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     return 0;       //результат &amp;quot;Pushkin (1799) Dostoevsky (1821) Tolstoy (1828) &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для множества (тип &amp;lt;tt&amp;gt;It&amp;lt;/tt&amp;gt; обозначает итератор, тип &amp;lt;tt&amp;gt;size_t&amp;lt;/tt&amp;gt; &amp;amp;mdash; беззнаковое целое):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;map&amp;lt;T1, T2&amp;gt;()&amp;lt;/tt&amp;gt;                  || — конструктор словаря. Типом ключей является &amp;lt;tt&amp;gt;T1&amp;lt;/tt&amp;gt;, типом значений &amp;amp;mdash; &amp;lt;tt&amp;gt;T2&amp;lt;/tt&amp;gt;. Поддерживается инициализация парой итераторов;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, bool&amp;gt; insert(pair&amp;lt;T1, T2&amp;gt; x);&amp;lt;/tt&amp;gt;    || — добавление пары &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в словарь. Метод принимает именно пару (которая может быть создана методом &amp;lt;tt&amp;gt;std::make_pair()&amp;lt;/tt&amp;gt;), а не два отдельных аргумента. Операция вставки возвращает пару, аналогичную возвращаемой методом &amp;lt;tt&amp;gt;set::insert()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t erase(T1 k);&amp;lt;/tt&amp;gt;            || — исключение из словаря элементов с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Возвращает количество исключённых элементов. Метод также поддерживает удаление элемента на определённой позиции, если передать ему не значение, а итератор (или пару итераторов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It find(T1 k);&amp;lt;/tt&amp;gt;                 || — поиск элемента с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; в словаре. Метод возвращает итератор, указывающий на найденную пару (именно пару, обратите на это внимание), либо итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;, если элемент не был найден;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t count(T1 k);&amp;lt;/tt&amp;gt;            || — подсчёт количества пар, ключи которых равны &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size();&amp;lt;/tt&amp;gt;                 || — получение количества пар в словаре;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t max_size(;&amp;lt;/tt&amp;gt;              || — получение максимального возможного (для данного компьютера и реализации STL) количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty();&amp;lt;/tt&amp;gt;                  || — проверка словаря на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void clear();&amp;lt;/tt&amp;gt;                  || — очистка словаря (исключение всех элементов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It lower_bound(T1 k);&amp;lt;/tt&amp;gt;          || — получение итератора, указывающего на пару с минимальным ключом, не меньшим &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Если такой пары нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;tt&amp;gt;It upper_bound(T1 k);&amp;lt;/tt&amp;gt;          || — получение итератора, указывающего на пару с минимальным ключом, большим &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Если такой пары нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, It&amp;gt; equal_range(T1 k)&amp;lt;/tt&amp;gt; || — получение пары итераторов, аналогичных результатам двух описанных выше методов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Элементы внутри &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;multimap&amp;lt;/tt&amp;gt; упорядочены по возрастанию ключей.&lt;br /&gt;
&lt;br /&gt;
[[Category:Базовые структуры данных и АТД]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=301</id>
		<title>Множество и словарь. Реализация на деревьях поиска</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=301"/>
		<updated>2013-03-03T15:46:14Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Словарь на деревьях поиска в STL */ &amp;lt;ttk -&amp;gt; &amp;lt;tt&amp;gt;k&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;&#039;&#039;&#039;Текст этой статьи готов, но ещё не обновлены изображения.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Общие сведения ==&lt;br /&gt;
Иногда решение задачи требует применения [[АТД «Множество». Реализация на битовых векторах|абстрактного типа данных &amp;amp;laquo;Множество&amp;amp;raquo;]], однако отсутствует возможность отмечать каждое допустимое значение отдельной логической переменной (если множество имеет большую мощность или бесконечно, как, например, множество строк или вещественных чисел). В этом случае необходима такая реализация множества, которая явно хранит выбранные элементы внутри себя, а также позволяет оперативно их отыскивать, добавлять и удалять. Такие требования роднят множество с другим типом данных, именуемым словарём.&lt;br /&gt;
&lt;br /&gt;
Словарь (англ. dictionary, map) &amp;amp;mdash; абстрактный тип данных, позволяющий хранить набор значений, обращение к которым происходит по ключам. Ключи должны допускать сравнение друг с другом. Примеры словарей достаточно разнообразны:&lt;br /&gt;
&lt;br /&gt;
*Обычный толковый словарь хранит определения слов (являющиеся значениями), сопоставленные с самими словами (являющимися ключами);&lt;br /&gt;
*Банковская база данных может хранить данные клиентов, сопоставленные с номерами счетов;&lt;br /&gt;
*Экзаменационная ведомость содержит оценки, сопоставленные с фамилиями студентов, и т. д.&lt;br /&gt;
&lt;br /&gt;
Множество можно рассматривать как словарь, в котором ключ элемента совпадает с его значением. Массив можно рассматривать как словарь, в котором ключи являются целыми числами. С другой стороны, словарь можно рассматривать как массив, тип индексов которого может не быть целочисленным. Например, содержимое телефонного справочника можно рассматривать как массив телефонных номеров, индексами в котором являются фамилии абонентов. Отсюда другое название словаря &amp;amp;mdash; ассоциативный массив (англ. assotiative array).&lt;br /&gt;
&lt;br /&gt;
Как и для случая множеств, возможна такая реализация словаря, в которой каждому ключу могут быть сопоставлены несколько значений (тогда для обозначения применяется термин multimap).&lt;br /&gt;
&lt;br /&gt;
== Интерфейс ==&lt;br /&gt;
Стандартный интерфейс множества был рассмотрен в статье [[АТД «Множество». Реализация на битовых векторах#Интерфейс|&amp;amp;laquo;Множество (реализация на битовых векторах)&amp;amp;raquo;]].&lt;br /&gt;
Операции словаря похожи на операции множества, но в качестве параметров принимают ключи, а не непосредственные значения элементов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void insert(T1 key, T2 value)&amp;lt;/tt&amp;gt; || — добавление пары &amp;lt;tt&amp;gt;(key, value)&amp;lt;/tt&amp;gt; в словарь;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void remove(T1 key)&amp;lt;/tt&amp;gt;          || — исключение из словаря значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T2 find(T1 key)&amp;lt;/tt&amp;gt;              || — получение значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[http://people.ksp.sk/~kuko/bak/index.html Визуализатор древовидных структур], вкладка &amp;amp;laquo;BST&amp;amp;raquo;.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
Как упоминалось ранее, словарь должен хранить все добавленные в него пары (ключ &amp;amp;mdash; значение). Можно предложить несколько подходов к организации этой информации внутри словаря:&lt;br /&gt;
&lt;br /&gt;
*Неупорядоченный массив пар. В этом случае добавление пары в конец массива имеет сложность O(1), поиск по ключу требует просмотра всего массива (O(N)), удаление также может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Отсортированный по ключам массив пар. Добавление пары в нужное место может потребовать сдвига всех элементов (O(N)), бинарный поиск по ключу требует O(logN), удаление может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Список пар позволит производить добавление и удаление за O(1), но поиск будет требовать O(N).&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что все предложенные варианты содержат операции с линейным временем работы, которое серьёзно ограничивает область их применения. Тем не менее, возможен подход, который позволяет достичь вычислительной сложности &amp;amp;Omega;(logN) для каждой из операций. Этот подход основан на применении структур данных, называемых деревьями поиска.&lt;br /&gt;
&lt;br /&gt;
=== Определение двоичного дерева поиска ===&lt;br /&gt;
Структура, представляющая элемент односвязного списка, имела два основных поля: хранимое значение и указатель на следующую подобную структуру. Пусть число указателей в узле равно двум. Тогда каждый такой узел может иметь не более двух потомков. Пусть также хранимая информация представлена в виде пары (ключ &amp;amp;mdash; значение).&lt;br /&gt;
&lt;br /&gt;
 struct TreeNode {&lt;br /&gt;
     int key;&lt;br /&gt;
     int value;&lt;br /&gt;
     TreeNode *left, *right;&lt;br /&gt;
     TreeNode (int k, int v) {&lt;br /&gt;
        key = k;&lt;br /&gt;
        val = v;&lt;br /&gt;
        left = right = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура данных, являющаяся связной совокупностью таких узлов, называется двоичным деревом (англ. binary tree). Группа деревьев именуется лесом (англ. forest).&lt;br /&gt;
&lt;br /&gt;
Пусть вершина A указывает на вершины B и C. Тогда B и C &amp;amp;mdash; &#039;&#039;потомки&#039;&#039; A, A &amp;amp;mdash; &#039;&#039;родитель&#039;&#039; B и C. Односвязный список имеет начальный элемент; по аналогии, двоичное дерево также имеет стартовую вершину &amp;amp;mdash; &#039;&#039;корень&#039;&#039;. Из корня по указателям можно добраться до любой вершины дерева. Вершины, не имеющие потомков, называются &#039;&#039;листьями&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Когда речь идёт о двоичном дереве поиска (англ. binary search tree, BST), подразумевается дерево, на элементы которого наложены дополнительные ограничения по размещению. Мы уже сталкивались с подобным: двоичное дерево, в котором ключ вершины не меньше, чем ключи её потомков, именуется [[АТД «Очередь с приоритетами»#Определение пирамиды|пирамидой]]. В пирамиде непосредственные потомки узла являются равноправными; в двоичном дереве поиска выделяется &#039;&#039;левый потомок&#039;&#039; и &#039;&#039;правый потомок&#039;&#039;, и дополнительное ограничение сформулировано следующим образом: ключи в левом поддереве не превышают ключа в родителе, а ключи в правом поддереве больше ключа в родителе (&#039;&#039;основное свойство дерева поиска&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Поиск в двоичном дереве ===&lt;br /&gt;
Пусть имеется указатель на корень дерева &amp;lt;tt&amp;gt;TreeNode *root&amp;lt;/tt&amp;gt; и требуется найти элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Ключ &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; можно сравнить с &amp;lt;tt&amp;gt;root-&amp;gt;key&amp;lt;/tt&amp;gt;, и если повезёт, то требуемый элемент будет найден. В противном случае можно однозначно сказать, в каком из поддеревьев &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; может находиться элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;: если &amp;lt;tt&amp;gt;k &amp;lt; root-&amp;gt;key&amp;lt;/tt&amp;gt;, то его следует искать в поддереве &amp;lt;tt&amp;gt;root-&amp;gt;left&amp;lt;/tt&amp;gt;, иначе &amp;amp;mdash; в &amp;lt;tt&amp;gt;root-&amp;gt;right&amp;lt;/tt&amp;gt;. Рассматриваемое поддерево имеет все свойства исходного двоичного дерева, поэтому действия по поиску можно повторить рекурсивно. Очевидно, что поиск завершается в одном из двух случаев: либо элемент найден, либо текущее поддерево стало пустым, т. е. поиск спустился до листьев и не встретил нужного элемента.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Рекурсивная реализация: &lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Итеративная реализация:&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     if (n == NULL || k == n-&amp;gt;key)&lt;br /&gt;
         return n;&lt;br /&gt;
     if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
         return find(n-&amp;gt;left, k);&lt;br /&gt;
     else&lt;br /&gt;
         return find(n-&amp;gt;right, k);&lt;br /&gt;
 }&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     while (n != NULL &amp;amp;&amp;amp; k != n-&amp;gt;key)&lt;br /&gt;
         if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
             n = n-&amp;gt;left;&lt;br /&gt;
         else&lt;br /&gt;
             n = n-&amp;gt;right;&lt;br /&gt;
     return n;           &lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Пример функции-обёртки, которая является частью интерфейса и открыта пользователю класса. Обратите внимание на то, что поиск может завершиться неудачей, и тогда нужно возвращать такое значение, которое могло бы явно об этом сигнализировать.&lt;br /&gt;
&lt;br /&gt;
 int find(int key) {&lt;br /&gt;
     TreeNode *res = find(root, key);&lt;br /&gt;
     if (res != NULL)&lt;br /&gt;
         return res-&amp;gt;value;&lt;br /&gt;
     else&lt;br /&gt;
         return -1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Худшим случаем для операции поиска является отсутствие нужного элемента в дереве. Тогда поиск спускается от корня до листа и затем возвращает значение &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;. Будем называть &#039;&#039;высотой дерева h&#039;&#039; количество вершин (или их связей, что на единицу меньше) на самом длинном пути от корня до какого-либо из листьев. Очевидно, что сложность операции поиска составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Вставка в двоичное дерево поиска ===&lt;br /&gt;
Каждый добавляемый элемент должен располагаться на строго определённом месте, чтобы не нарушалось основное свойство двоичного дерева поиска. Найти такое место для конкретного элемента нам поможет та же идея, что была применена в реализации поиска.&lt;br /&gt;
&lt;br /&gt;
Будем идти от корня, спускаясь в те поддеревья, которые должны содержать добавляемый ключ. Когда спуск достигает значения &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, остаётся только заменить указатель на это значение указателем на новый элемент.&lt;br /&gt;
&lt;br /&gt;
 void insert(int key, int value) {&lt;br /&gt;
     if (root == NULL) {&lt;br /&gt;
         root = new TreeNode(key, value);&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     TreeNode *n = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
             if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                 n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;left;&lt;br /&gt;
             }&lt;br /&gt;
         } else {&lt;br /&gt;
             if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                 n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;right;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Таким образом, добавляемый элемент всегда становится листом двоичного дерева поиска. Достаточно очевидно, что вычислительная сложность операции вставки равна O(h).&lt;br /&gt;
&lt;br /&gt;
Порядок добавления элементов в двоичное дерево поиска играет очень важную роль. Минимальная высота двоичного дерева поиска, содержащего N элементов, равна &amp;amp;lceil;log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;N&amp;amp;rceil;; в этом случае заполнение дерева элементами равномерно, высоты поддеревьев любой вершины различаются не более чем на единицу, а само дерево именуется сбалансированным. Но существует и обратный случай, когда каждое добавление элемента увеличивает высоту дерева на 1, в результате дерево вырождается в односвязный список, а его высота становится равной N. Итоговая форма дерева зависит только от порядка добавления элементов.&lt;br /&gt;
&lt;br /&gt;
Обыкновенное двоичное дерево поиска не содержит никаких средств ограничения собственной высоты. Однако существует большое количество расширений двоичных деревьев, позволяющих поддерживать высоту на уровне O(logN), в которых, таким образом, операции поиска и добавления будут иметь сложность O(logN). Такие структуры данных называются &#039;&#039;балансирующимися деревьями&#039;&#039;. Некоторые из них описаны в разделе [[:Категория:Усложнённые структуры данных|&amp;amp;laquo;Усложнённые структуры данных&amp;amp;raquo;]].&lt;br /&gt;
&lt;br /&gt;
=== Удаление из двоичного дерева поиска ===&lt;br /&gt;
Расположение элемента, который требуется удалить, определяется тем же методом, что был использован в процедурах поиска и вставки. Однако далее возможны различные варианты действий:&lt;br /&gt;
&lt;br /&gt;
*Если удаляемый элемент является листом (не имеет потомков), то достаточно убрать ссылку на него из его родителя;&lt;br /&gt;
*Если удаляемый элемент имеет только одного потомка, то ссылка на удаляемый элемент в родителе заменяется ссылкой на этого потомка;&lt;br /&gt;
*Наконец, наиболее нетривиальной является ситуация, когда удаляемый элемент имеет двух потомков. Рассмотрим её отдельно.&lt;br /&gt;
Конечно, можно подвесить одно из поддеревьев к листу второго и далее рассматривать случай удаления узла с одним потомком, но такой подход увеличивает высоту дерева. Поэтому используется другое решение: удаляемый узел заменяется некоторым из его потомков (не обязательно непосредственных).&lt;br /&gt;
&lt;br /&gt;
Чтобы при этом не нарушилось основное свойство двоичного дерева, ключ этого потомка должен быть не меньше всех ключей левого поддерева удаляемого узла и меньше всех ключей правого поддерева удаляемого узла. Как можно догадаться, этому условию удовлетворяет только один потомок &amp;amp;mdash; узел с максимальным ключом в левом поддереве, непосредственный предшественник удаляемого узла. Найти его можно, переходя по правым ссылкам в поддереве &amp;lt;tt&amp;gt;n-&amp;gt;left&amp;lt;/tt&amp;gt;, где &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; &amp;amp;mdash; удаляемый элемент. Далее производится обмен этих узлов и уничтожение ссылки на удаляемый узел.&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что операция удаления элемента из двоичного дерева является достаточно сложной, и, кроме того, она реорганизует дерево, что в некоторых случаях является нежелательным. Поэтому часто удаление элемента заменяется присвоением ему некоторого &amp;amp;laquo;признака отсутствия&amp;amp;raquo;, который позволяет игнорировать этот элемент в операциях поиска.&lt;br /&gt;
&lt;br /&gt;
Желающие всё же могут ознакомиться здесь с примером реализации удаления элемента. Для наглядности данная процедура использует несколько вспомогательных методов.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 TreeNode *parent(TreeNode *n) {&lt;br /&gt;
     if (n == root)&lt;br /&gt;
         return NULL;&lt;br /&gt;
     TreeNode *p = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (n-&amp;gt;key &amp;lt;= p-&amp;gt;key) {&lt;br /&gt;
             if (p-&amp;gt;left-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;left;&lt;br /&gt;
         } else {&lt;br /&gt;
             if (p-&amp;gt;right-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;right;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return p;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TreeNode *predecessor(TreeNode *n) {&lt;br /&gt;
     TreeNode *l = n-&amp;gt;left;&lt;br /&gt;
     while (l-&amp;gt;right != NULL)&lt;br /&gt;
         l = l-&amp;gt;right;&lt;br /&gt;
     return l;&lt;br /&gt;
 }&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; |&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 void exclude(TreeNode *n) {&lt;br /&gt;
     TreeNode *p = parent(n);&lt;br /&gt;
     TreeNode *c = n-&amp;gt;left ? n-&amp;gt;left : n-&amp;gt;right;&lt;br /&gt;
     if (p == NULL)&lt;br /&gt;
         root = c;&lt;br /&gt;
     else if (p-&amp;gt;left == n)&lt;br /&gt;
         p-&amp;gt;left = c;&lt;br /&gt;
     else&lt;br /&gt;
         p-&amp;gt;right = c;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void remove(int key) {&lt;br /&gt;
     TreeNode *n = find(key, root);&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     if (n-&amp;gt;left &amp;amp;&amp;amp; n-&amp;gt;right) {&lt;br /&gt;
         TreeNode *pred = predecessor(n);&lt;br /&gt;
         n-&amp;gt;key = pred-&amp;gt;key;&lt;br /&gt;
         n-&amp;gt;value = pred-&amp;gt;value;&lt;br /&gt;
         n = pred;&lt;br /&gt;
     }&lt;br /&gt;
     exclude(n);&lt;br /&gt;
     delete n;&lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt; принимает указатель на узел &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, имеющий не более одного непосредственного потомка, определяет для этого узла его родителя &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; (с помощью функции &amp;lt;tt&amp;gt;parent()&amp;lt;/tt&amp;gt;) и потомка &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt;, а затем исправляет ссылку (&amp;lt;tt&amp;gt;p =&amp;gt; n&amp;lt;/tt&amp;gt;) на (&amp;lt;tt&amp;gt;p =&amp;gt; с&amp;lt;/tt&amp;gt;), исключая, таким образом, &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; из дерева поиска.&lt;br /&gt;
&lt;br /&gt;
Таким образом, первые два случая удаления обрабатываются за счёт функции &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;. Если же удаляемый узел имеет двух потомком, то с помощью метода &amp;lt;tt&amp;gt;predecessor()&amp;lt;/tt&amp;gt; определяется его непосредственный предшественник, его данные копируются на место удаляемого узла, а ссылка на удаляемый узел перемещается на предшественника. Теперь удаляемый узел вновь имеет не более 1 потомка и может быть обработан методом &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Операция удаления требует определения родителя элемента, в отдельных случаях &amp;amp;mdash; отыскания предшественника, а также ещё O(1) действий. Итоговая вычислительная сложность составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивный обход двоичного дерева поиска ===&lt;br /&gt;
Пусть требуется посетить все элементы двоичного дерева (например, чтобы вывести их). Приведём простую рекурсивную процедуру, решающую данную задачу:&lt;br /&gt;
&lt;br /&gt;
 void traverse(TreeNode *n) {&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     traverse(n-&amp;gt;left);&lt;br /&gt;
     printf(&amp;quot;%d&amp;quot;, n-&amp;gt;value);&lt;br /&gt;
     traverse(n-&amp;gt;right);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Обход запускается вызовом &amp;lt;tt&amp;gt;traverse(root)&amp;lt;/tt&amp;gt;. Приведённая реализация обесцвечивает сначала посещение всех узлом, ключи которых не превышают ключа данного узла, затем посещение самого узла, затем посещение всех узлов, ключи которых больше ключа данного узла. Индуктивным рассуждением можно доказать, что данный обход выводит все элементы дерева в порядке увеличения их ключей.&lt;br /&gt;
&lt;br /&gt;
Данный обход (левое поддерево &amp;amp;mdash; родитель &amp;amp;mdash; правое поддерево) является лишь одним из шести возможных. На иллюстрации приведены результаты каждого типа обхода для одного и того же дерева.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён код реализации словаря на двоичном дереве поиска. Ключами и значениями являются целые числа. Операция удаления опущена.&lt;br /&gt;
&lt;br /&gt;
 class Map {&lt;br /&gt;
 &lt;br /&gt;
     struct TreeNode {&lt;br /&gt;
         int key;&lt;br /&gt;
         int value;&lt;br /&gt;
         TreeNode *left, *right;&lt;br /&gt;
         TreeNode (int k, int v) {&lt;br /&gt;
             key = k;&lt;br /&gt;
             val = v;&lt;br /&gt;
             left = right = NULL;&lt;br /&gt;
         } &lt;br /&gt;
     } root;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
  &lt;br /&gt;
     Map() {&lt;br /&gt;
         root = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int find(int key) {&lt;br /&gt;
         TreeNode *res = root;&lt;br /&gt;
         while (res != NULL &amp;amp;&amp;amp; res-&amp;gt;key != key)&lt;br /&gt;
             res = res-&amp;gt;key &amp;lt; key ? res-&amp;gt;left : res-&amp;gt;right;&lt;br /&gt;
         return res ? res-&amp;gt;value : -1;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void insert(int key, int value) {&lt;br /&gt;
         if (root == NULL) {&lt;br /&gt;
             root = new TreeNode(key, value);&lt;br /&gt;
             return;&lt;br /&gt;
         }&lt;br /&gt;
         TreeNode *n = root;&lt;br /&gt;
         while (true) {&lt;br /&gt;
             if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
                 if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                     n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                     return;&lt;br /&gt;
                 } else {&lt;br /&gt;
                     n = n-&amp;gt;left;&lt;br /&gt;
                 }&lt;br /&gt;
             } else {&lt;br /&gt;
                 if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                     n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                     return;&lt;br /&gt;
                 } else {&lt;br /&gt;
                     n = n-&amp;gt;right;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Некоторые вопросы для размышления:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Как может выглядеть рекурсивная реализация вставки и удаления элемента двоичного дерева поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как реализовать отыскание максимума (минимума) в двоичном дереве поиска? Можно ли организовать очередь с приоритетами на двоичном дереве поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как, в общем случае, реализовать операции поиска элемента, предшествующего данному, и элемента, следующего за данным?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Множество на деревьях поиска в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;set&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;set&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;. В том же заголовочном файле описан шаблон &amp;lt;tt&amp;gt;multiset&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;, представляющий множество, в котором могут храниться несколько одинаковых значений. Оба шаблона реализованы на балансирующихся двоичных деревьях поиска.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;set&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     set&amp;lt;int&amp;gt; s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.insert(i * i);&lt;br /&gt;
     for (int i = 0; i &amp;lt; 30; i++) {&lt;br /&gt;
         if (s.find(i) != s.end())&lt;br /&gt;
             cout &amp;lt;&amp;lt; *i &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
     return 0;       //результат &amp;quot;1 4 9 16 25&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для множества (тип &amp;lt;tt&amp;gt;It&amp;lt;/tt&amp;gt; обозначает итератор, тип &amp;lt;tt&amp;gt;size_t&amp;lt;/tt&amp;gt; &amp;amp;mdash; беззнаковое целое):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;set&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;                       || — конструктор множества; поддерживается инициализация парой итераторов;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, bool&amp;gt; insert(T x);&amp;lt;/tt&amp;gt;    || — добавление значения &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в множество. Метод возвращает пару, первый элемент которой указывает на элемент со значением &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;, а второй равен &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt;, если элемент был добавлен, либо &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;, если такой элемент уже был в множестве. Эквивалент этого метода для шаблона &amp;lt;tt&amp;gt;multiset&amp;lt;/tt&amp;gt; возвращает только итератор, указывающий на добавленный элемент;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t erase(T x);&amp;lt;/tt&amp;gt;             || — исключение значения &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; из множества. Возвращает количество исключённых элементов. Метод также поддерживает удаление элемента на определённой позиции, если передать ему не значение, а итератор (или пару итераторов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It find(T x);&amp;lt;/tt&amp;gt;                  || — поиск элемента &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в множестве. Метод возвращает итератор, указывающий на найденный элемент, либо итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;, если элемент не был найден;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t count(T x);&amp;lt;/tt&amp;gt;             || — подсчёт количества элементов, равных &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size();&amp;lt;/tt&amp;gt;                 || — получение количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t max_size();&amp;lt;/tt&amp;gt;             || — получение максимального возможного (для данного компьютера и реализации STL) количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty();&amp;lt;/tt&amp;gt;                  || — проверка множества на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void clear();&amp;lt;/tt&amp;gt;                  || — очистка множества (исключение всех элементов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It lower_bound(T x);&amp;lt;/tt&amp;gt;           || — получение итератора, указывающего на минимальный элемент, не меньший &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Если такого элемента нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;tt&amp;gt;It upper_bound(T x);&amp;lt;/tt&amp;gt;           || — получение итератора, указывающего на минимальный элемент, больший &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;. Если такого элемента нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, It&amp;gt; equal_range(T x)&amp;lt;/tt&amp;gt; || — получение пары итераторов, аналогичных результатам двух описанных выше методов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Элементы внутри &amp;lt;tt&amp;gt;set&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;multiset&amp;lt;/tt&amp;gt; являются упорядоченными по возрастанию.&lt;br /&gt;
&lt;br /&gt;
== Словарь на деревьях поиска в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;map&amp;lt;T1, T2&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;map&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;. В том же заголовочном файле описан шаблон &amp;lt;tt&amp;gt;multimap&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;, представляющий словарь, в котором могут храниться несколько пар с одинаковыми ключами. Оба шаблона реализованы на балансирующихся двоичных деревьях поиска.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 #include &amp;lt;map&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     map&amp;lt;int, string&amp;gt; m;&lt;br /&gt;
     m.insert(make_pair(1828, &amp;quot;Tolstoy&amp;quot;));  &lt;br /&gt;
     m.insert(make_pair(1799, &amp;quot;Pushkin&amp;quot;));&lt;br /&gt;
     m.insert(make_pair(1821, &amp;quot;Dostoevsky&amp;quot;));        &lt;br /&gt;
     for (int i = 1750; i &amp;lt; 1850; i++) {&lt;br /&gt;
         if (m.find(i) != m.end())&lt;br /&gt;
             cout &amp;lt;&amp;lt; i.second &amp;lt;&amp;lt; &amp;quot;(&amp;quot; &amp;lt;&amp;lt; i.first &amp;lt;&amp;lt; &amp;quot;) &amp;quot;;&lt;br /&gt;
     return 0;       //результат &amp;quot;Pushkin (1799) Dostoevsky (1821) Tolstoy (1828) &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для множества (тип &amp;lt;tt&amp;gt;It&amp;lt;/tt&amp;gt; обозначает итератор, тип &amp;lt;tt&amp;gt;size_t&amp;lt;/tt&amp;gt; &amp;amp;mdash; беззнаковое целое):&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;map&amp;lt;T1, T2&amp;gt;()&amp;lt;/tt&amp;gt;                  || — конструктор словаря. Типом ключей является &amp;lt;tt&amp;gt;T1&amp;lt;/tt&amp;gt;, типом значений &amp;amp;mdash; &amp;lt;tt&amp;gt;T2&amp;lt;/tt&amp;gt;. Поддерживается инициализация парой итераторов;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, bool&amp;gt; insert(pair&amp;lt;T1, T2&amp;gt; x);&amp;lt;/tt&amp;gt;    || — добавление пары &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; в словарь. Метод принимает именно пару (которая может быть создана методом &amp;lt;tt&amp;gt;std::make_pair()&amp;lt;/tt&amp;gt;), а не два отдельных аргумента. Операция вставки возвращает пару, аналогичную возвращаемой методом &amp;lt;tt&amp;gt;set::insert()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t erase(T1 k);&amp;lt;/tt&amp;gt;            || — исключение из словаря элементов с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Возвращает количество исключённых элементов. Метод также поддерживает удаление элемента на определённой позиции, если передать ему не значение, а итератор (или пару итераторов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It find(T1 k);&amp;lt;/tt&amp;gt;                 || — поиск элемента с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; в словаре. Метод возвращает итератор, указывающий на найденную пару (именно пару, обратите на это внимание), либо итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;, если элемент не был найден;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t count(T1 k);&amp;lt;/tt&amp;gt;            || — подсчёт количества пар, ключи которых равны &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size();&amp;lt;/tt&amp;gt;                 || — получение количества пар в словаре;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t max_size(;&amp;lt;/tt&amp;gt;              || — получение максимального возможного (для данного компьютера и реализации STL) количества элементов в множестве;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty();&amp;lt;/tt&amp;gt;                  || — проверка словаря на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void clear();&amp;lt;/tt&amp;gt;                  || — очистка словаря (исключение всех элементов);&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;It lower_bound(T1 k);&amp;lt;/tt&amp;gt;          || — получение итератора, указывающего на пару с минимальным ключом, не меньшим &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Если такой пары нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;tt&amp;gt;It upper_bound(T1 k);&amp;lt;/tt&amp;gt;          || — получение итератора, указывающего на пару с минимальным ключом, большим &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Если такой пары нет, возвращается итератор &amp;lt;tt&amp;gt;set::end()&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;pair&amp;lt;It, It&amp;gt; equal_range(T1 k)&amp;lt;/tt&amp;gt; || — получение пары итераторов, аналогичных результатам двух описанных выше методов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Элементы внутри &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;multimap&amp;lt;/tt&amp;gt; упорядочены по возрастанию ключей.&lt;br /&gt;
&lt;br /&gt;
[[Category:Базовые структуры данных и АТД]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=291</id>
		<title>Множество и словарь. Реализация на деревьях поиска</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C._%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BD%D0%B0_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F%D1%85_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0&amp;diff=291"/>
		<updated>2013-03-03T13:07:32Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Определение двоичного дерева поиска */ TheeNode -&amp;gt; TreeNode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;&#039;&#039;&#039;Редактирование данной статьи ещё не завершено.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Общие сведения ==&lt;br /&gt;
Иногда решение задачи требует применения [[АТД «Множество». Реализация на битовых векторах|абстрактного типа данных &amp;amp;laquo;Множество&amp;amp;raquo;]], однако отсутствует возможность отмечать каждое допустимое значение отдельной логической переменной (если множество имеет большую мощность или бесконечно, как, например, множество строк или вещественных чисел). В этом случае необходима такая реализация множества, которая явно хранит выбранные элементы внутри себя, а также позволяет оперативно их отыскивать, добавлять и удалять. Такие требования роднят множество с другим типом данных, именуемым словарём.&lt;br /&gt;
&lt;br /&gt;
Словарь (англ. dictionary, map) &amp;amp;mdash; абстрактный тип данных, позволяющий хранить набор значений, обращение к которым происходит по ключам. Ключи должны допускать сравнение друг с другом. Примеры словарей достаточно разнообразны:&lt;br /&gt;
&lt;br /&gt;
*Обычный толковый словарь хранит определения слов (являющиеся значениями), сопоставленные с самими словами (являющимися ключами);&lt;br /&gt;
*Банковская база данных может хранить данные клиентов, сопоставленные с номерами счетов;&lt;br /&gt;
*Экзаменационная ведомость содержит оценки, сопоставленные с фамилиями студентов, и т. д.&lt;br /&gt;
&lt;br /&gt;
Множество можно рассматривать как словарь, в котором ключ элемента совпадает с его значением. Массив можно рассматривать как словарь, в котором ключи являются целыми числами. С другой стороны, словарь можно рассматривать как массив, тип индексов которого может не быть целочисленным. Например, содержимое телефонного справочника можно рассматривать как массив телефонных номеров, индексами в котором являются фамилии абонентов. Отсюда другое название словаря &amp;amp;mdash; ассоциативный массив (англ. assotiative array).&lt;br /&gt;
&lt;br /&gt;
Как и для случая множеств, возможна такая реализация словаря, в которой каждому ключу могут быть сопоставлены несколько значений (тогда для обозначения применяется термин multimap).&lt;br /&gt;
&lt;br /&gt;
== Интерфейс ==&lt;br /&gt;
Стандартный интерфейс множества был рассмотрен в статье [[АТД «Множество». Реализация на битовых векторах#Интерфейс|&amp;amp;laquo;Множество (реализация на битовых векторах)&amp;amp;raquo;]].&lt;br /&gt;
Операции словаря похожи на операции множества, но в качестве параметров принимают ключи, а не непосредственные значения элементов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void insert(T1 key, T2 value)&amp;lt;/tt&amp;gt; || — добавление пары &amp;lt;tt&amp;gt;(key, value)&amp;lt;/tt&amp;gt; в словарь;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void remove(T1 key)&amp;lt;/tt&amp;gt;          || — исключение из словаря значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T2 find(T1 key)&amp;lt;/tt&amp;gt;              || — получение значения, сопоставленного с ключом &amp;lt;tt&amp;gt;key&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[http://people.ksp.sk/~kuko/bak/index.html Визуализатор древовидных структур], вкладка &amp;amp;laquo;BST&amp;amp;raquo;.&lt;br /&gt;
&lt;br /&gt;
== Реализация ==&lt;br /&gt;
Как упоминалось ранее, словарь должен хранить все добавленные в него пары (ключ &amp;amp;mdash; значение). Можно предложить несколько подходов к организации этой информации внутри словаря:&lt;br /&gt;
&lt;br /&gt;
*Неупорядоченный массив пар. В этом случае добавление пары в конец массива имеет сложность O(1), поиск по ключу требует просмотра всего массива (O(N)), удаление также может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Отсортированный по ключам массив пар. Добавление пары в нужное место может потребовать сдвига всех элементов (O(N)), бинарный поиск по ключу требует O(logN), удаление может потребовать сдвига всех элементов (O(N)).&lt;br /&gt;
*Список пар позволит производить добавление и удаление за O(1), но поиск будет требовать O(N).&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что все предложенные варианты содержат операции с линейным временем работы, которое серьёзно ограничивает область их применения. Тем не менее, возможен подход, который позволяет достичь вычислительной сложности &amp;amp;Omega;(logN) для каждой из операций. Этот подход основан на применении структур данных, называемых деревьями поиска.&lt;br /&gt;
&lt;br /&gt;
=== Определение двоичного дерева поиска ===&lt;br /&gt;
Структура, представляющая элемент односвязного списка, имела два основных поля: хранимое значение и указатель на следующую подобную структуру. Пусть число указателей в узле равно двум. Тогда каждый такой узел может иметь не более двух потомков. Пусть также хранимая информация представлена в виде пары (ключ &amp;amp;mdash; значение).&lt;br /&gt;
&lt;br /&gt;
 struct TreeNode {&lt;br /&gt;
     int key;&lt;br /&gt;
     int value;&lt;br /&gt;
     TreeNode *left, *right;&lt;br /&gt;
     TreeNode (int k, int v) {&lt;br /&gt;
        key = k;&lt;br /&gt;
        val = v;&lt;br /&gt;
        left = right = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Структура данных, являющаяся связной совокупностью таких узлов, называется двоичным деревом (англ. binary tree). Группа деревьев именуется лесом (англ. forest).&lt;br /&gt;
&lt;br /&gt;
Пусть вершина A указывает на вершины B и C. Тогда B и C &amp;amp;mdash; &#039;&#039;потомки&#039;&#039; A, A &amp;amp;mdash; &#039;&#039;родитель&#039;&#039; B и C. Односвязный список имеет начальный элемент; по аналогии, двоичное дерево также имеет стартовую вершину &amp;amp;mdash; &#039;&#039;корень&#039;&#039;. Из корня по указателям можно добраться до любой вершины дерева. Вершины, не имеющие потомков, называются &#039;&#039;листьями&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Когда речь идёт о двоичном дереве поиска (англ. binary search tree, BST), подразумевается дерево, на элементы которого наложены дополнительные ограничения по размещению. Мы уже сталкивались с подобным: двоичное дерево, в котором ключ вершины не меньше, чем ключи её потомков, именуется [[АТД «Очередь с приоритетами»#Определение пирамиды|пирамидой]]. В пирамиде непосредственные потомки узла являются равноправными; в двоичном дереве поиска выделяется &#039;&#039;левый потомок&#039;&#039; и &#039;&#039;правый потомок&#039;&#039;, и дополнительное ограничение сформулировано следующим образом: ключи в левом поддереве не превышают ключа в родителе, а ключи в правом поддереве больше ключа в родителе (&#039;&#039;основное свойство дерева поиска&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Поиск в двоичном дереве ===&lt;br /&gt;
Пусть имеется указатель на корень дерева &amp;lt;tt&amp;gt;TreeNode *root&amp;lt;/tt&amp;gt; и требуется найти элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. Ключ &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; можно сравнить с &amp;lt;tt&amp;gt;root-&amp;gt;key&amp;lt;/tt&amp;gt;, и если повезёт, то требуемый элемент будет найден. В противном случае можно однозначно сказать, в каком из поддеревьев &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt; может находиться элемент с ключом &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;: если &amp;lt;tt&amp;gt;k &amp;lt; root-&amp;gt;key&amp;lt;/tt&amp;gt;, то его следует искать в поддереве &amp;lt;tt&amp;gt;root-&amp;gt;left&amp;lt;/tt&amp;gt;, иначе &amp;amp;mdash; в &amp;lt;tt&amp;gt;root-&amp;gt;right&amp;lt;/tt&amp;gt;. Рассматриваемое поддерево имеет все свойства исходного двоичного дерева, поэтому действия по поиску можно повторить рекурсивно. Очевидно, что поиск завершается в одном из двух случаев: либо элемент найден, либо текущее поддерево стало пустым, т. е. поиск спустился до листьев и не встретил нужного элемента.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Рекурсивная реализация: &lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  | Итеративная реализация:&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     if (n == NULL || k == n-&amp;gt;key)&lt;br /&gt;
         return n;&lt;br /&gt;
     if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
         return find(n-&amp;gt;left, k);&lt;br /&gt;
     else&lt;br /&gt;
         return find(n-&amp;gt;right, k);&lt;br /&gt;
 }&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 TreeNode *find(TreeNode *n, int k) {&lt;br /&gt;
     while (n != NULL &amp;amp;&amp;amp; k != n-&amp;gt;key)&lt;br /&gt;
         if (k &amp;lt; n-&amp;gt;key)&lt;br /&gt;
             n = n-&amp;gt;left;&lt;br /&gt;
         else&lt;br /&gt;
             n = n-&amp;gt;right;&lt;br /&gt;
     return n;           &lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Пример функции-обёртки, которая является частью интерфейса и открыта пользователю класса. Обратите внимание на то, что поиск может завершиться неудачей, и тогда нужно возвращать такое значение, которое могло бы явно об этом сигнализировать.&lt;br /&gt;
&lt;br /&gt;
 int find(int key) {&lt;br /&gt;
     TreeNode *res = find(root, key);&lt;br /&gt;
     if (res != NULL)&lt;br /&gt;
         return res-&amp;gt;value;&lt;br /&gt;
     else&lt;br /&gt;
         return -1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Худшим случаем для операции поиска является отсутствие нужного элемента в дереве. Тогда поиск спускается от корня до листа и затем возвращает значение &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;. Будем называть &#039;&#039;высотой дерева h&#039;&#039; количество вершин (или их связей, что на единицу меньше) на самом длинном пути от корня до какого-либо из листьев. Очевидно, что сложность операции поиска составляет O(h).&lt;br /&gt;
&lt;br /&gt;
=== Вставка в двоичное дерево поиска ===&lt;br /&gt;
Каждый добавляемый элемент должен располагаться на строго определённом месте, чтобы не нарушалось основное свойство двоичного дерева поиска. Найти такое место для конкретного элемента нам поможет та же идея, что была применена в реализации поиска.&lt;br /&gt;
&lt;br /&gt;
Будем идти от корня, спускаясь в те поддеревья, которые должны содержать добавляемый ключ. Когда спуск достигает значения &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, остаётся только заменить указатель на это значение указателем на новый элемент.&lt;br /&gt;
&lt;br /&gt;
 void insert(int key, int value) {&lt;br /&gt;
     if (root == NULL) {&lt;br /&gt;
         root = new TreeNode(key, value);&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
     TreeNode *n = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (key &amp;lt;= n-&amp;gt;key) {&lt;br /&gt;
             if (n-&amp;gt;left == NULL) {&lt;br /&gt;
                 n-&amp;gt;left = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;left;&lt;br /&gt;
             }&lt;br /&gt;
         } else {&lt;br /&gt;
             if (n-&amp;gt;right == NULL) {&lt;br /&gt;
                 n-&amp;gt;right = new TreeNode(key, value);&lt;br /&gt;
                 return;&lt;br /&gt;
             } else {&lt;br /&gt;
                 n = n-&amp;gt;right;&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Таким образом, добавляемый элемент всегда становится листом двоичного дерева поиска. Достаточно очевидно, что вычислительная сложность операции вставки равна O(h).&lt;br /&gt;
&lt;br /&gt;
Порядок добавления элементов в двоичное дерево поиска играет очень важную роль. Минимальная высота двоичного дерева поиска, содержащего N элементов, равна &amp;amp;lceil;log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;N&amp;amp;rceil;; в этом случае заполнение дерева элементами равномерно, высоты поддеревьев любой вершины различаются не более чем на единицу, а само дерево именуется сбалансированным. Но существует и обратный случай, когда каждое добавление элемента увеличивает высоту дерева на 1, в результате дерево вырождается в односвязный список, а его высота становится равной N. Итоговая форма дерева зависит только от порядка добавления элементов.&lt;br /&gt;
&lt;br /&gt;
Обыкновенное двоичное дерево поиска не содержит никаких средств ограничения собственной высоты. Однако существует большое количество расширений двоичных деревьев, позволяющих поддерживать высоту на уровне O(logN), в которых, таким образом, операции поиска и добавления будут иметь сложность O(logN). Такие структуры данных называются &#039;&#039;балансирующимися деревьями&#039;&#039;. Некоторые из них описаны в разделе [[:Категория:Усложнённые структуры данных|&amp;amp;laquo;Усложнённые структуры данных&amp;amp;raquo;]].&lt;br /&gt;
&lt;br /&gt;
=== Удаление из двоичного дерева поиска ===&lt;br /&gt;
Расположение элемента, который требуется удалить, определяется тем же методом, что был использован в процедурах поиска и вставки. Однако далее возможны различные варианты действий:&lt;br /&gt;
&lt;br /&gt;
*Если удаляемый элемент является листом (не имеет потомков), то достаточно убрать ссылку на него из его родителя;&lt;br /&gt;
*Если удаляемый элемент имеет только одного потомка, то ссылка на удаляемый элемент в родителе заменяется ссылкой на этого потомка;&lt;br /&gt;
*Наконец, наиболее нетривиальной является ситуация, когда удаляемый элемент имеет двух потомков. Рассмотрим её отдельно.&lt;br /&gt;
Конечно, можно подвесить одно из поддеревьев к листу второго и далее рассматривать случай удаления узла с одним потомком, но такой подход увеличивает высоту дерева. Поэтому используется другое решение: удаляемый узел заменяется некоторым из его потомков (не обязательно непосредственных).&lt;br /&gt;
&lt;br /&gt;
Чтобы при этом не нарушилось основное свойство двоичного дерева, ключ этого потомка должен быть не меньше всех ключей левого поддерева удаляемого узла и меньше всех ключей правого поддерева удаляемого узла. Как можно догадаться, этому условию удовлетворяет только один потомок &amp;amp;mdash; узел с максимальным ключом в левом поддереве, непосредственный предшественник удаляемого узла. Найти его можно, переходя по правым ссылкам в поддереве &amp;lt;tt&amp;gt;n-&amp;gt;left&amp;lt;/tt&amp;gt;, где &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; &amp;amp;mdash; удаляемый элемент. Далее производится обмен этих узлов и уничтожение ссылки на удаляемый узел.&lt;br /&gt;
&lt;br /&gt;
Можно видеть, что операция удаления элемента из двоичного дерева является достаточно сложной, и, кроме того, она реорганизует дерево, что в некоторых случаях является нежелательным. Поэтому часто удаление элемента заменяется присвоением ему некоторого &amp;amp;laquo;признака отсутствия&amp;amp;raquo;, который позволяет игнорировать этот элемент в операциях поиска.&lt;br /&gt;
&lt;br /&gt;
Желающие всё же могут ознакомиться здесь с примером реализации удаления элемента. Для наглядности данная процедура использует несколько вспомогательных методов.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 TreeNode *parent(TreeNode *n) {&lt;br /&gt;
     if (n == root)&lt;br /&gt;
         return NULL;&lt;br /&gt;
     TreeNode *p = root;&lt;br /&gt;
     while (true) {&lt;br /&gt;
         if (n-&amp;gt;key &amp;lt;= p-&amp;gt;key) {&lt;br /&gt;
             if (p-&amp;gt;left-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;left;&lt;br /&gt;
         } else {&lt;br /&gt;
             if (p-&amp;gt;right-&amp;gt;key == key)&lt;br /&gt;
                 break;&lt;br /&gt;
             p = p-&amp;gt;right;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return p;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TreeNode *predecessor(TreeNode *n) {&lt;br /&gt;
     TreeNode *l = n-&amp;gt;left;&lt;br /&gt;
     while (l-&amp;gt;right != NULL)&lt;br /&gt;
         l = l-&amp;gt;right;&lt;br /&gt;
     return l;&lt;br /&gt;
 }&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; |&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 void exclude(TreeNode *n) {&lt;br /&gt;
     TreeNode *p = parent(n);&lt;br /&gt;
     TreeNode *c = n-&amp;gt;left ? n-&amp;gt;left : n-&amp;gt;right;&lt;br /&gt;
     if (p == NULL)&lt;br /&gt;
         root = c;&lt;br /&gt;
     else if (p-&amp;gt;left == n)&lt;br /&gt;
         p-&amp;gt;left = c;&lt;br /&gt;
     else&lt;br /&gt;
         p-&amp;gt;right = c;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void remove(int key) {&lt;br /&gt;
     TreeNode *n = find(key, root);&lt;br /&gt;
     if (n == NULL)&lt;br /&gt;
         return;&lt;br /&gt;
     if (n-&amp;gt;left &amp;amp;&amp;amp; n-&amp;gt;right) {&lt;br /&gt;
         TreeNode *pred = predecessor(n);&lt;br /&gt;
         n-&amp;gt;key = pred-&amp;gt;key;&lt;br /&gt;
         n-&amp;gt;value = pred-&amp;gt;value;&lt;br /&gt;
         n = pred;&lt;br /&gt;
     }&lt;br /&gt;
     exclude(n);&lt;br /&gt;
     delete n;&lt;br /&gt;
 }&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt; принимает указатель на узел &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;, имеющий не более одного непосредственного потомка, определяет для этого узла его родителя &amp;lt;tt&amp;gt;p&amp;lt;/tt&amp;gt; (с помощью функции &amp;lt;tt&amp;gt;parent()&amp;lt;/tt&amp;gt;) и потомка &amp;lt;tt&amp;gt;c&amp;lt;/tt&amp;gt;, а затем исправляет ссылку (&amp;lt;tt&amp;gt;p =&amp;gt; n&amp;lt;/tt&amp;gt;) на (&amp;lt;tt&amp;gt;p =&amp;gt; с&amp;lt;/tt&amp;gt;), исключая, таким образом, &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; из дерева поиска.&lt;br /&gt;
&lt;br /&gt;
Таким образом, первые два случая удаления обрабатываются за счёт функции &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;. Если же удаляемый узел имеет двух потомком, то с помощью метода &amp;lt;tt&amp;gt;predecessor()&amp;lt;/tt&amp;gt; определяется его непосредственный предшественник, его данные копируются на место удаляемого узла, а ссылка на удаляемый узел перемещается на предшественника. Теперь удаляемый узел вновь имеет не более 1 потомка и может быть обработан методом &amp;lt;tt&amp;gt;exclude()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Операция удаления требует определения родителя элемента, в отдельных случаях &amp;amp;mdash; отыскания предшественника, а также ещё O(1) действий. Итоговая вычислительная сложность составляет O(h).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Некоторые вопросы для размышления:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Как может выглядеть рекурсивная реализация вставки и удаления элемента двоичного дерева поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как реализовать отыскание максимума (минимума) в двоичном дереве поиска? Можно ли организовать очередь с приоритетами на двоичном дереве поиска?&#039;&#039;&lt;br /&gt;
*&#039;&#039;Как, в общем случае, реализовать операции поиска элемента, предшествующего данному, и элемента, следующего за данным?&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=230</id>
		<title>Тренировочная олимпиада №2: Структуры данных</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=230"/>
		<updated>2013-02-27T07:50:52Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Защищена страница «Тренировочная олимпиада №2: Структуры данных» (‎[edit=sysop] (бессрочно) ‎[move=sysop] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== О мероприятии ==&lt;br /&gt;
В первых неделях марта (дата уточняется) состоится вторая тренировочная олимпиада по программированию Ульяновского государственного технического университета. С анонсом соревнования можно ознакомиться на [http://acm.khpnets.info/?p=104 отдельной странице].&lt;br /&gt;
&lt;br /&gt;
К участию в соревновании приглашаются студенты факультета информационных систем и технологий УлГТУ, учащиеся школ, посещающие занятия по олимпиадному программированию, а также все желающие попробовать собственные силы в спортивном программировании.&lt;br /&gt;
&lt;br /&gt;
== Тематика олимпиады и материалы для подготовки ==&lt;br /&gt;
Олимпиада завершает раздел &amp;amp;laquo;Структуры данных&amp;amp;raquo; в программе занятий по олимпиадному программированию для старшеклассников. На соревновании будут представлены задачи, проверяющие навыки реализации и применения основных абстрактных типов данных и структур данных. &lt;br /&gt;
&lt;br /&gt;
Для самостоятельной подготовки к олимпиаде рекомендуется использовать [[:Категория:Учебный курс «Алгоритмы и структуры данных»| соответствующий цикл статей]], представленный на этом сайте. Темы, знакомство с которыми особенно желательно для успешного участия в олимпиаде, выделены в оглавлении раздела специальным значком. На текущий момент не для всех статей завершено редактирование, но до начала олимпиады все необходимые теоретические сведения будут опубликованы на сайте.&lt;br /&gt;
&lt;br /&gt;
Во время соревнования от участников не будет требоваться ручная реализация тех или иных структур данных и АТД. Участники могут использовать стандартные реализации типов, предоставляемые языками программирования (шаблоны STL, коллекции Java и др.), если сочтут это нужным.&lt;br /&gt;
&lt;br /&gt;
== Регистрация ==&lt;br /&gt;
Обращаем внимание участников на то, что для подготовки аудиторий к соревнованию требуется приблизительная информация о количестве присутствующих. В связи с этим для возможности участия в тренировочной олимпиаде предлагается пройти процедуру регистрации.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно отправить письмо с темой &#039;&#039;&#039;&amp;amp;laquo;Заявка на участие в олимпиаде&amp;amp;raquo;&#039;&#039;&#039;, указанием &#039;&#039;&#039;фамилии&#039;&#039;&#039;, &#039;&#039;&#039;имени&#039;&#039;&#039;, &#039;&#039;&#039;отчества&#039;&#039;&#039;, &#039;&#039;&#039;факультета&#039;&#039;&#039; и &#039;&#039;&#039;группы обучения&#039;&#039;&#039; (для учащихся школ &amp;amp;mdash; наименования учебного заведения) на электронный адрес &lt;br /&gt;
[mailto:fol34@ya.ru?subject=Заявка%20на%20участие%20в%20олимпиаде fol34@ya.ru].&lt;br /&gt;
&lt;br /&gt;
Письмо может выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
 Кому: Владимир Фолунин &amp;lt;fol34@ya.ru&amp;gt;&lt;br /&gt;
 Тема: Заявка на участие в олимпиаде&lt;br /&gt;
 &lt;br /&gt;
 Иванов Пётр Сергеевич&lt;br /&gt;
 ФИСТ, ИВТбд-11&lt;br /&gt;
&lt;br /&gt;
Вам придёт уведомление о включении в список участников.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная информация ==&lt;br /&gt;
Все необходимые объявления о точной дате, времени и месте проведения мероприятия будут публиковаться на данной странице. &lt;br /&gt;
&lt;br /&gt;
Вопросы и замечания можно оставлять на вкладке &amp;amp;laquo;[[Обсуждение:Тренировочная_олимпиада_№2:_Структуры_данных|Обсуждение]]&amp;amp;raquo; данной страницы. Вы также можете обращаться к [http://vk.com/alvelcom организаторам олимпиады].&lt;br /&gt;
&lt;br /&gt;
[[Category:Тренировочные олимпиады]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%BA%D1%83%D1%80%D1%81_%C2%AB%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%C2%BB&amp;diff=229</id>
		<title>Категория:Учебный курс «Алгоритмы и структуры данных»</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B9_%D0%BA%D1%83%D1%80%D1%81_%C2%AB%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%C2%BB&amp;diff=229"/>
		<updated>2013-02-27T07:50:39Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Защищена страница «Категория:Учебный курс «Алгоритмы и структуры данных»» (‎[edit=sysop] (бессрочно) ‎[move=sysop] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Материалы курса ==&lt;br /&gt;
&lt;br /&gt;
Значком &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt; отмечены темы, которым необходимо уделить особое внимание при подготовке к [[Тренировочная олимпиада №2: Структуры данных|олимпиаде]].&lt;br /&gt;
&lt;br /&gt;
* Структуры данных&lt;br /&gt;
** Предварительные сведения&lt;br /&gt;
*** Введение в ООП. Классы&lt;br /&gt;
*** Управление памятью. Указатели&lt;br /&gt;
** Базовые структуры данных и АТД&lt;br /&gt;
*** Смежные и связные структуры&lt;br /&gt;
*** Динамические массивы&lt;br /&gt;
*** Списки&lt;br /&gt;
*** [[АТД «Стек»]] &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt;&lt;br /&gt;
*** [[АТД «Очередь»]]&lt;br /&gt;
*** [[АТД «Очередь с приоритетами»]]&lt;br /&gt;
*** [[АТД «Множество». Реализация на битовых векторах]] &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt;&lt;br /&gt;
*** АТД «Множество» и «Словарь». Реализация на деревьях поиска &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt;&lt;br /&gt;
*** АТД «Множество» и «Словарь». Реализация на хэш-таблицах &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt;&lt;br /&gt;
** Усложнённые структуры данных&lt;br /&gt;
*** [[Система непересекающихся множеств]] &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt;&lt;br /&gt;
*** Обзор балансирующихся деревьев: 2-3- и LLRB-деревья&lt;br /&gt;
*** [[Декартово дерево]] &amp;lt;span style=&#039;color: #01DF3A;&#039;&amp;gt;&amp;amp;nabla;&amp;lt;/span&amp;gt;&lt;br /&gt;
*** Декартово дерево по неявному ключу&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;amp;copy; В. А. Фолунин, УлГТУ, 2012&amp;amp;ndash;2013&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=228</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=228"/>
		<updated>2013-02-27T07:50:23Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Защищена страница «Заглавная страница» (‎[edit=sysop] (бессрочно) ‎[move=sysop] (бессрочно)) [каскадная]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
Добро пожаловать на веб-сайт курса &#039;&#039;&#039;[[:Категория:Учебный_курс_«Алгоритмы_и_структуры_данных»|&amp;amp;laquo;Алгоритмы и структуры данных&amp;amp;raquo;]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== [[Тренировочная олимпиада №2: Структуры_данных|Информация о тренировочной олимпиаде №2 (структуры данных)]] ====&lt;br /&gt;
&lt;br /&gt;
==== Для чего создан этот сайт? ====&lt;br /&gt;
Опубликованные здесь статьи предназначены для систематизации и повторения материалов, предлагаемых на занятиях по олимпиадному программированию, которые проводятся в Ульяновском государственном техническом университете.&lt;br /&gt;
&lt;br /&gt;
Сведения, публикуемые на этом сайте, рекомендуется использовать для самостоятельной подготовки к контрольным тематическим олимпиадам. К участию в этих олимпиадах приглашаются старшеклассники, посещающие занятия курса олимпиадной подготовки, студенты факультета информационных систем и технологий УлГТУ, а также все желающие попробовать свои силы на поприще спортивного программирования.&lt;br /&gt;
&lt;br /&gt;
Материалы веб-сайта также могут быть полезны студентам при изучении дисциплин &amp;amp;laquo;Алгоритмическое обеспечение информационных систем&amp;amp;raquo; и &amp;amp;laquo;Программирование на языках высокого уровня&amp;amp;raquo;.&lt;br /&gt;
&lt;br /&gt;
По замыслу авторов, в перспективе данный сайт может стать основным ресурсом теоретической подготовки команд УлГТУ, участвующих в региональных, всероссийских и международных соревнованиях по спортивному программированию.&lt;br /&gt;
&lt;br /&gt;
==== Является ли этот сайт учебником, справочником или чем-либо ещё? ====&lt;br /&gt;
По-видимому, наилучшим образом описать назначение этого сайта можно, определив его основные отличия от других источников сведений по схожей тематике.&lt;br /&gt;
&lt;br /&gt;
Отличия данного сайта от книги (учебника) по алгоритмам и структурам данных, такой как [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844 &amp;amp;laquo;Introduction to Algorithms&amp;amp;raquo; Т. Кормена]:&lt;br /&gt;
&lt;br /&gt;
*В перспективе, более широкий охват тем. При этом внимание в большей степени уделяется элементам, получающим применение в спортивном программировании (например, декартовым деревьям), и в меньшей степени &amp;amp;mdash; &amp;amp;laquo;промышленным&amp;amp;raquo; алгоритмам (например, шифрованию RSA);&lt;br /&gt;
*Меньшая доля нетривиального математического анализа решений, ориентация на основные идеи алгоритмов и доказательств;&lt;br /&gt;
*Гибкость, расширяемость, возможность обратной связи (через вкладки &amp;amp;laquo;Обсуждение&amp;amp;raquo;).&lt;br /&gt;
&lt;br /&gt;
Отличия данного сайта от сборников алгоритмов, таких как [http://e-maxx.ru e-maxx.ru]:&lt;br /&gt;
&lt;br /&gt;
*Общая последовательность изложения, позволяющая рассматривать материалы как составляющие единого курса;&lt;br /&gt;
*Отчасти в связи с предыдущим, охват базовых тем, которые обычно опускаются в подобных сборниках (сложность алгоритмов, управление памятью и т. п.).&lt;br /&gt;
&lt;br /&gt;
==== Каким образом мне можно оставить вопрос, замечание или предложение? ====&lt;br /&gt;
Воспользуйтесь вкладкой &amp;amp;laquo;Обсуждение&amp;amp;raquo; интересующей вас статьи. Авторы курса будут очень рады увидеть ценные поправки, а также постараются разъяснить неточно понятые места.&lt;br /&gt;
&lt;br /&gt;
==== [[:Категория:Учебный_курс_«Алгоритмы_и_структуры_данных»|Перейти к содержанию курса]]  ====&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=225</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=225"/>
		<updated>2013-02-26T19:21:51Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.middled td&lt;br /&gt;
 {vertical-align: middle;}&lt;br /&gt;
&lt;br /&gt;
table.centered td&lt;br /&gt;
 {text-align: center;}&lt;br /&gt;
&lt;br /&gt;
table.centered td pre&lt;br /&gt;
 {text-align: left; }&lt;br /&gt;
&lt;br /&gt;
table pre&lt;br /&gt;
 {margin: 0;}&lt;br /&gt;
&lt;br /&gt;
table.w60px td&lt;br /&gt;
 {width: 60px;}&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=223</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=223"/>
		<updated>2013-02-26T19:08:30Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.centered td&lt;br /&gt;
 {text-align: center;}&lt;br /&gt;
&lt;br /&gt;
table.centered td pre&lt;br /&gt;
 {text-align: left; }&lt;br /&gt;
&lt;br /&gt;
table pre&lt;br /&gt;
 {margin: 0;}&lt;br /&gt;
&lt;br /&gt;
table.w60px td&lt;br /&gt;
 {width: 60px;}&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=222</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=222"/>
		<updated>2013-02-26T19:03:45Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.centered td&lt;br /&gt;
 {text-align: center;}&lt;br /&gt;
&lt;br /&gt;
table.centered td pre&lt;br /&gt;
 {text-align: left; margin: 0;}&lt;br /&gt;
&lt;br /&gt;
table.w60px td&lt;br /&gt;
 {width: 60px;}&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=220</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.js&amp;diff=220"/>
		<updated>2013-02-26T18:57:48Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Новая страница: «/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой ст…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&amp;lt;!-- Yandex.Metrika counter --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(function (d, w, c) {&lt;br /&gt;
    (w[c] = w[c] || []).push(function() {&lt;br /&gt;
        try {&lt;br /&gt;
            w.yaCounter4730998 = new Ya.Metrika({id:4730998,&lt;br /&gt;
                    clickmap:true,&lt;br /&gt;
                    trackLinks:true});&lt;br /&gt;
        } catch(e) { }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    var n = d.getElementsByTagName(&amp;quot;script&amp;quot;)[0],&lt;br /&gt;
        s = d.createElement(&amp;quot;script&amp;quot;),&lt;br /&gt;
        f = function () { n.parentNode.insertBefore(s, n); };&lt;br /&gt;
    s.type = &amp;quot;text/javascript&amp;quot;;&lt;br /&gt;
    s.async = true;&lt;br /&gt;
    s.src = (d.location.protocol == &amp;quot;https:&amp;quot; ? &amp;quot;https:&amp;quot; : &amp;quot;http:&amp;quot;) + &amp;quot;//mc.yandex.ru/metrika/watch.js&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    if (w.opera == &amp;quot;[object Opera]&amp;quot;) {&lt;br /&gt;
        d.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, f, false);&lt;br /&gt;
    } else { f(); }&lt;br /&gt;
})(document, window, &amp;quot;yandex_metrika_callbacks&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Alvelcom&amp;diff=219</id>
		<title>Участник:Alvelcom</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Alvelcom&amp;diff=219"/>
		<updated>2013-02-26T18:54:27Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Новая страница: «{| | &amp;#039;&amp;#039;&amp;#039;Хусаинов Павел&amp;#039;&amp;#039;&amp;#039; |- | [mailto:alvelREMOVEITcomATgmailDOTcom alvelREMOVEITcomATgmailDOTcom] |}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
| &#039;&#039;&#039;Хусаинов Павел&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:alvelREMOVEITcomATgmailDOTcom alvelREMOVEITcomATgmailDOTcom]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=218</id>
		<title>Обсуждение:Тренировочная олимпиада №2: Структуры данных</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=218"/>
		<updated>2013-02-26T18:52:41Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Любые вопросы по тренировочной олимпиаде можно задать тут.&lt;br /&gt;
&lt;br /&gt;
Для этого воспользуйтесь пунктом &amp;amp;laquo;Добавить тему&amp;amp;raquo; в верхнем меню страницы.&lt;br /&gt;
--[[Участник:Alvelcom|Alvelcom]] ([[Обсуждение участника:Alvelcom|обсуждение]]) 21:48, 26 февраля 2013 (MSK)&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=217</id>
		<title>Тренировочная олимпиада №2: Структуры данных</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=217"/>
		<updated>2013-02-26T18:49:15Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Дополнительная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== О мероприятии ==&lt;br /&gt;
В первых неделях марта (дата уточняется) состоится вторая тренировочная олимпиада по программированию Ульяновского государственного технического университета. С анонсом соревнования можно ознакомиться на [http://acm.khpnets.info/?p=104 отдельной странице].&lt;br /&gt;
&lt;br /&gt;
К участию в соревновании приглашаются студенты факультета информационных систем и технологий УлГТУ, учащиеся школ, посещающие занятия по олимпиадному программированию, а также все желающие попробовать собственные силы в спортивном программировании.&lt;br /&gt;
&lt;br /&gt;
== Тематика олимпиады и материалы для подготовки ==&lt;br /&gt;
Олимпиада завершает раздел &amp;amp;laquo;Структуры данных&amp;amp;raquo; в программе занятий по олимпиадному программированию для старшеклассников. На соревновании будут представлены задачи, проверяющие навыки реализации и применения основных абстрактных типов данных и структур данных. &lt;br /&gt;
&lt;br /&gt;
Для самостоятельной подготовки к олимпиаде рекомендуется использовать [[:Категория:Учебный курс «Алгоритмы и структуры данных»| соответствующий цикл статей]], представленный на этом сайте. Темы, знакомство с которыми особенно желательно для успешного участия в олимпиаде, выделены в оглавлении раздела специальным значком. На текущий момент не для всех статей завершено редактирование, но до начала олимпиады все необходимые теоретические сведения будут опубликованы на сайте.&lt;br /&gt;
&lt;br /&gt;
Во время соревнования от участников не будет требоваться ручная реализация тех или иных структур данных и АТД. Участники могут использовать стандартные реализации типов, предоставляемые языками программирования (шаблоны STL, коллекции Java и др.), если сочтут это нужным.&lt;br /&gt;
&lt;br /&gt;
== Регистрация ==&lt;br /&gt;
Обращаем внимание участников на то, что для подготовки аудиторий к соревнованию требуется приблизительная информация о количестве присутствующих. В связи с этим для возможности участия в тренировочной олимпиаде предлагается пройти процедуру регистрации.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно отправить письмо с темой &#039;&#039;&#039;&amp;amp;laquo;Заявка на участие в олимпиаде&amp;amp;raquo;&#039;&#039;&#039;, указанием &#039;&#039;&#039;фамилии&#039;&#039;&#039;, &#039;&#039;&#039;имени&#039;&#039;&#039;, &#039;&#039;&#039;отчества&#039;&#039;&#039;, &#039;&#039;&#039;факультета&#039;&#039;&#039; и &#039;&#039;&#039;группы обучения&#039;&#039;&#039; (для учащихся школ &amp;amp;mdash; наименования учебного заведения) на электронный адрес &lt;br /&gt;
[mailto:fol34@ya.ru?subject=Заявка%20на%20участие%20в%20олимпиаде fol34@ya.ru].&lt;br /&gt;
&lt;br /&gt;
Письмо может выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
 Кому: Владимир Фолунин &amp;lt;fol34@ya.ru&amp;gt;&lt;br /&gt;
 Тема: Заявка на участие в олимпиаде&lt;br /&gt;
 &lt;br /&gt;
 Иванов Пётр Сергеевич&lt;br /&gt;
 ФИСТ, ИВТбд-11&lt;br /&gt;
&lt;br /&gt;
Вам придёт уведомление о включении в список участников.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная информация ==&lt;br /&gt;
Все необходимые объявления о точной дате, времени и месте проведения мероприятия будут публиковаться на данной странице. &lt;br /&gt;
&lt;br /&gt;
Вопросы и замечания можно оставлять на вкладке &amp;amp;laquo;[[Обсуждение:Тренировочная_олимпиада_№2:_Структуры_данных|Обсуждение]]&amp;amp;raquo; данной страницы. Вы также можете обращаться к [http://vk.com/alvelcom организаторам олимпиады].&lt;br /&gt;
&lt;br /&gt;
[[Category:Тренировочные олимпиады]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=216</id>
		<title>Обсуждение:Тренировочная олимпиада №2: Структуры данных</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=216"/>
		<updated>2013-02-26T18:48:32Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Новая страница: «Любые вопросы по тренировочной олимпиаде можно задать тут. --~~~~»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Любые вопросы по тренировочной олимпиаде можно задать тут.&lt;br /&gt;
--[[Участник:Alvelcom|Alvelcom]] ([[Обсуждение участника:Alvelcom|обсуждение]]) 21:48, 26 февраля 2013 (MSK)&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=211</id>
		<title>Тренировочная олимпиада №2: Структуры данных</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=211"/>
		<updated>2013-02-26T18:35:44Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Регистрация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== О мероприятии ==&lt;br /&gt;
В первых неделях марта (дата уточняется) состоится вторая тренировочная олимпиада по программированию Ульяновского государственного технического университета. С анонсом соревнования можно ознакомиться на [http://acm.khpnets.info/?p=104 отдельной странице].&lt;br /&gt;
&lt;br /&gt;
== Тематика олимпиады и материалы для подготовки ==&lt;br /&gt;
Олимпиада завершает раздел &amp;amp;laquo;Структуры данных&amp;amp;raquo; в программе занятий по олимпиадному программированию для старшеклассников. На соревновании будут представлены задачи, проверяющие навыки реализации и применения основных абстрактных типов данных и структур данных. &lt;br /&gt;
&lt;br /&gt;
Для самостоятельной подготовки к олимпиаде рекомендуется использовать [[:Категория:Учебный курс «Алгоритмы и структуры данных»| соответствующий цикл статей]], представленный на этом сайте. Темы, знакомство с которыми особенно желательно для успешного участия в олимпиаде, выделены в оглавлении раздела специальным значком. На текущий момент не для всех статей завершено редактирование, но до начала олимпиады все необходимые теоретические сведения будут опубликованы на сайте.&lt;br /&gt;
&lt;br /&gt;
Во время соревнования от участников не будет требоваться ручная реализация тех или иных структур данных и АТД. Участники могут использовать стандартные реализации типов, предоставляемые языками программирования (шаблоны STL, коллекции Java и др.), если сочтут это нужным.&lt;br /&gt;
&lt;br /&gt;
== Регистрация ==&lt;br /&gt;
Обращаем внимание участников на то, что для подготовки аудиторий к соревнованию требуется приблизительная информация о количестве присутствующих. В связи с этим для возможности участия в тренировочной олимпиаде предлагается пройти процедуру регистрации.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно отправить письмо с темой &#039;&#039;&#039;&amp;amp;laquo;Заявка на участие в олимпиаде&amp;amp;raquo;&#039;&#039;&#039;, указанием &#039;&#039;&#039;фамилии&#039;&#039;&#039;, &#039;&#039;&#039;имени&#039;&#039;&#039;, &#039;&#039;&#039;отчества&#039;&#039;&#039;, &#039;&#039;&#039;факультета&#039;&#039;&#039; и &#039;&#039;&#039;группы обучения&#039;&#039;&#039; (для учащихся школ &amp;amp;mdash; наименования учебного заведения) на электронный адрес &lt;br /&gt;
[mailto:fol34@ya.ru?subject=Заявка%20на%20участие%20в%20олимпиаде fol34@ya.ru].&lt;br /&gt;
&lt;br /&gt;
Письмо может выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
 Кому: fol34@ya.ru&lt;br /&gt;
 Тема: Заявка на участие в олимпиаде&lt;br /&gt;
 &lt;br /&gt;
 Иванов Пётр Сергеевич&lt;br /&gt;
 ФИСТ, ИВТбд-11&lt;br /&gt;
&lt;br /&gt;
Вам придёт уведомление о включении в список участников.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная информация ==&lt;br /&gt;
Все необходимые объявления о точной дате, времени и месте проведения мероприятия будут публиковаться на данной странице. &lt;br /&gt;
&lt;br /&gt;
Вопросы и замечания можно оставлять на вкладке &amp;amp;laquo;Обсуждение&amp;amp;raquo; данной страницы. Вы также можете обращаться к [http://vk.com/alvelcom организаторам олимпиады].&lt;br /&gt;
&lt;br /&gt;
[[Category:Тренировочные олимпиады]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=210</id>
		<title>Тренировочная олимпиада №2: Структуры данных</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A2%D1%80%D0%B5%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BB%D0%B8%D0%BC%D0%BF%D0%B8%D0%B0%D0%B4%D0%B0_%E2%84%962:_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=210"/>
		<updated>2013-02-26T18:30:41Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Регистрация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== О мероприятии ==&lt;br /&gt;
В первых неделях марта (дата уточняется) состоится вторая тренировочная олимпиада по программированию Ульяновского государственного технического университета. С анонсом соревнования можно ознакомиться на [http://acm.khpnets.info/?p=104 отдельной странице].&lt;br /&gt;
&lt;br /&gt;
== Тематика олимпиады и материалы для подготовки ==&lt;br /&gt;
Олимпиада завершает раздел &amp;amp;laquo;Структуры данных&amp;amp;raquo; в программе занятий по олимпиадному программированию для старшеклассников. На соревновании будут представлены задачи, проверяющие навыки реализации и применения основных абстрактных типов данных и структур данных. &lt;br /&gt;
&lt;br /&gt;
Для самостоятельной подготовки к олимпиаде рекомендуется использовать [[:Категория:Учебный курс «Алгоритмы и структуры данных»| соответствующий цикл статей]], представленный на этом сайте. Темы, знакомство с которыми особенно желательно для успешного участия в олимпиаде, выделены в оглавлении раздела специальным значком. На текущий момент не для всех статей завершено редактирование, но до начала олимпиады все необходимые теоретические сведения будут опубликованы на сайте.&lt;br /&gt;
&lt;br /&gt;
Во время соревнования от участников не будет требоваться ручная реализация тех или иных структур данных и АТД. Участники могут использовать стандартные реализации типов, предоставляемые языками программирования (шаблоны STL, коллекции Java и др.), если сочтут это нужным.&lt;br /&gt;
&lt;br /&gt;
== Регистрация ==&lt;br /&gt;
Обращаем внимание участников на то, что для подготовки аудиторий к соревнованию требуется приблизительная информация о количестве присутствующих. В связи с этим для возможности участия в тренировочной олимпиаде предлагается пройти процедуру регистрации.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно отправить письмо с темой &#039;&#039;&#039;&amp;amp;laquo;Заявка на участие в олимпиаде&amp;amp;raquo;&#039;&#039;&#039; , указанием &#039;&#039;&#039;фамилии&#039;&#039;&#039;, &#039;&#039;&#039;имени&#039;&#039;&#039;, &#039;&#039;&#039;отчества&#039;&#039;&#039;, &#039;&#039;&#039;факультета&#039;&#039;&#039; и &#039;&#039;&#039;группы обучения&#039;&#039;&#039; (для учащихся школ &amp;amp;mdash; наименования учебного заведения) на электронный адрес &lt;br /&gt;
[mailto:fol34@ya.ru?subject=Заявка%20на%20участие%20в%20олимпиаде fol34@ya.ru].&lt;br /&gt;
&lt;br /&gt;
Письмо может выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
 Кому: fol34@ya.ru&lt;br /&gt;
 Тема: Заявка на участие в олимпиаде&lt;br /&gt;
 &lt;br /&gt;
 Иванов Пётр Сергеевич&lt;br /&gt;
 ФИСТ, ИВТбд-11&lt;br /&gt;
&lt;br /&gt;
Вам придёт уведомление о включении в список участников.&lt;br /&gt;
&lt;br /&gt;
== Дополнительная информация ==&lt;br /&gt;
Все необходимые объявления о точной дате, времени и месте проведения мероприятия будут публиковаться на данной странице. &lt;br /&gt;
&lt;br /&gt;
Вопросы и замечания можно оставлять на вкладке &amp;amp;laquo;Обсуждение&amp;amp;raquo; данной страницы. Вы также можете обращаться к [http://vk.com/alvelcom организаторам олимпиады].&lt;br /&gt;
&lt;br /&gt;
[[Category:Тренировочные олимпиады]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=197</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=197"/>
		<updated>2013-02-26T11:38:28Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.centered td&lt;br /&gt;
 {text-align: center;}&lt;br /&gt;
&lt;br /&gt;
table.centered td pre&lt;br /&gt;
 {text-align: left;}&lt;br /&gt;
&lt;br /&gt;
table.w60px td&lt;br /&gt;
 {width: 60px;}&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=195</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=195"/>
		<updated>2013-02-26T11:28:18Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.centered td&lt;br /&gt;
 {text-align: center;}&lt;br /&gt;
&lt;br /&gt;
table.w60px td&lt;br /&gt;
 {width: 60px;}&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=190</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=190"/>
		<updated>2013-02-26T11:19:33Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.centered td&lt;br /&gt;
 {text-align: center}&lt;br /&gt;
&lt;br /&gt;
table.60px td&lt;br /&gt;
 {width: 60px}&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=187</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=187"/>
		<updated>2013-02-26T11:04:08Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
body.page-Заглавная_страница h1.firstHeading {&lt;br /&gt;
display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h2, h3, hr {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol, table tr td {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
tt {&lt;br /&gt;
white-space: pre;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table tr {&lt;br /&gt;
vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*MediaWiki interface*/&lt;br /&gt;
.allpagesredirect, span.redirect-in-category a {font-style:italic}&lt;br /&gt;
&lt;br /&gt;
#mw-subcategories, #mw-pages { clear:both }&lt;br /&gt;
&lt;br /&gt;
.gallerybox .thumb img,&lt;br /&gt;
.filehistory a img,&lt;br /&gt;
#file img  {&lt;br /&gt;
 background:url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&amp;quot;) repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#wpSave {font-weight:bold}&lt;br /&gt;
&lt;br /&gt;
.mw-tag-markers {&lt;br /&gt;
 font: italic 90% sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.warningbox {&lt;br /&gt;
  background: #ff9;&lt;br /&gt;
  border: 1px solid #ee0;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/6/62/Nuvola_apps_important.png/30px-Nuvola_apps_important.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.informationbox {&lt;br /&gt;
  background: #F4FBFF;&lt;br /&gt;
  border: 1px solid #D5D9E6;&lt;br /&gt;
  background-image: url(&#039;//upload.wikimedia.org/wikipedia/commons/thumb/2/28/Information.svg/30px-Information.svg.png&#039;)&lt;br /&gt;
}&lt;br /&gt;
.warningbox, .informationbox {&lt;br /&gt;
  padding: 10px 10px 10px 50px;&lt;br /&gt;
  background-position: 10px center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
 overflow-x: auto;&lt;br /&gt;
 overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* rm white border */&lt;br /&gt;
div.thumb {border: none}&lt;br /&gt;
div.tright {border: none; margin: 0.5em 0 0.8em 1.4em}&lt;br /&gt;
div.tleft  {border: none; margin: 0.5em 1.4em 0.8em 0}&lt;br /&gt;
&lt;br /&gt;
div.thumb img.thumbimage {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style for horizontal lists (separator following item) */&lt;br /&gt;
.skin-monobook .hlist dl,&lt;br /&gt;
.skin-modern .hlist dl,&lt;br /&gt;
.skin-vector .hlist dl {&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li { &lt;br /&gt;
    display: inline;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt:after {&lt;br /&gt;
    content: &amp;quot;:&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:after,&lt;br /&gt;
.hlist li:after {&lt;br /&gt;
    content: &amp;quot; •&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dd:last-child:after,&lt;br /&gt;
.hlist dt:last-child:after,&lt;br /&gt;
.hlist li:last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* for IE 8 */&lt;br /&gt;
.hlist dd.hlist-last-child:after,&lt;br /&gt;
.hlist dt.hlist-last-child:after,&lt;br /&gt;
.hlist li.hlist-last-child:after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
/* Add parens around nested lists */&lt;br /&gt;
.hlist dl dl dd:first-child:before,&lt;br /&gt;
.hlist ol ol li:first-child:before,&lt;br /&gt;
.hlist ul ul li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist dl dl dd:last-child:after,&lt;br /&gt;
.hlist ol ol li:last-child:after,&lt;br /&gt;
.hlist ul ul li:last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* For IE8 */&lt;br /&gt;
.hlist dl dl dd.hlist-last-child:after,&lt;br /&gt;
.hlist ol ol li.hlist-last-child:after,&lt;br /&gt;
.hlist ul ul li.hlist-last-child:after {&lt;br /&gt;
    content: &amp;quot;)&amp;quot;;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Put numbers in ordered lists */&lt;br /&gt;
.hlist.hnum ol li {&lt;br /&gt;
    counter-increment: level1;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol li:before {&lt;br /&gt;
    content: counter(level1) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li {&lt;br /&gt;
    counter-increment: level2;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:first-child:before {&lt;br /&gt;
    content: &amp;quot;(&amp;quot; counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.hlist.hnum ol ol li:before {&lt;br /&gt;
    content: counter(level2) &amp;quot; &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[Википедия:Оформление таблиц]] */&lt;br /&gt;
table.standard, table.wide, table.prettytable&lt;br /&gt;
 {border:1px solid #aaa; border-collapse: collapse}&lt;br /&gt;
table.standard th, table.wide th, table.prettytable th&lt;br /&gt;
 {border:1px solid #aaa; padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.standard td, table.wide td, table.prettytable td &lt;br /&gt;
 {border: 1px solid #aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
table.standard caption, table.wide caption, table.tiles caption&lt;br /&gt;
 {font-weight:bold; padding-top: 0.2em; padding-bottom:0.2em}&lt;br /&gt;
table.wide {width: 100%}&lt;br /&gt;
&lt;br /&gt;
table.simple {border-color:#aaa; border-collapse:collapse}&lt;br /&gt;
table.simple th, table.simple td {border-color:#aaa; padding-left:0.2em; padding-right:0.2em}&lt;br /&gt;
&lt;br /&gt;
table.tiles {border-collapse:separate; border-spacing:2px}&lt;br /&gt;
table.tiles th {padding-left:0.2em; padding-right:0.2em; background:#eef}&lt;br /&gt;
table.tiles td {padding-left:0.2em; padding-right:0.2em; background:#f0f0f0}&lt;br /&gt;
 &lt;br /&gt;
table.graytable {background:#f0f0f0; padding:1em; width: 100%}&lt;br /&gt;
table.graytable caption {padding-top:0.5em; background:#f0f0f0; font-weight:bold}&lt;br /&gt;
table.graytable caption span.subcaption {font-size:80%; font-weight:normal}&lt;br /&gt;
table.graytable th, table.graytable td {font-size:80%}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tr.highlight th, table tr th.highlight {background:#eef}&lt;br /&gt;
tr.highlight td, table tr td.highlight {background:#ffe; font-weight:normal}&lt;br /&gt;
tr.bright th, table tr th.bright {background:#ccf}&lt;br /&gt;
tr.bright td, table tr td.bright {background:#fec}&lt;br /&gt;
tr.shadow th, tr.shadow td, table tr th.shadow, table tr td.shadow   {background:#f0f0f0}&lt;br /&gt;
tr.dark th, tr.dark td, table tr th.dark, table tr td.dark {background:#ccc}&lt;br /&gt;
.transparent {background:transparent !important}&lt;br /&gt;
&lt;br /&gt;
table.toccolours th {background:#ccf}&lt;br /&gt;
&lt;br /&gt;
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */&lt;br /&gt;
th.mbox-text, td.mbox-text {   /* The message body cell(s) */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 0.25em 0.9em;     /* 0.9em left/right */&lt;br /&gt;
    width: 100%;               /* Make all mboxes the same width regardless of text length */&lt;br /&gt;
}&lt;br /&gt;
td.mbox-image {                /* The left image cell */&lt;br /&gt;
    border: none; &lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-imageright {           /* The right image cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */&lt;br /&gt;
    text-align: center; &lt;br /&gt;
}&lt;br /&gt;
td.mbox-empty-cell {           /* An empty narrow cell */&lt;br /&gt;
    border: none;&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
/* Image message box styles */&lt;br /&gt;
table.imbox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 3px solid #1e90ff;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
    background: #fbfbfb;&lt;br /&gt;
}&lt;br /&gt;
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */&lt;br /&gt;
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */&lt;br /&gt;
    display: block;         /* Fix for webkit to force 100% width.  */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .imbox {       /* For imboxes inside other templates.  */&lt;br /&gt;
    margin: 4px;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.imbox-notice {&lt;br /&gt;
    border: 3px solid #1e90ff;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-speedy {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-delete {&lt;br /&gt;
    border: 3px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-content {&lt;br /&gt;
    border: 3px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-style {&lt;br /&gt;
    border: 3px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-move {&lt;br /&gt;
    border: 3px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-protection {&lt;br /&gt;
    border: 3px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-license {&lt;br /&gt;
    border: 3px solid #88a;       /* Dark gray */&lt;br /&gt;
    background: #f7f8ff;          /* Light gray */&lt;br /&gt;
}&lt;br /&gt;
table.imbox-featured {&lt;br /&gt;
    border: 3px solid #cba135;    /* Brown-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Category message box styles */&lt;br /&gt;
table.cmbox {&lt;br /&gt;
    margin: 3px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #aaa; &lt;br /&gt;
    background: #DFE8FF;    /* Default &amp;quot;notice&amp;quot; blue */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.cmbox-notice {&lt;br /&gt;
    background: #D8E8FF;    /* Blue */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-speedy {&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
    border: 4px solid #b22222;    /* Red */&lt;br /&gt;
    background: #FFDBDB;          /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-delete {&lt;br /&gt;
    background: #FFDBDB;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-content {&lt;br /&gt;
    background: #FFE7CE;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-style {&lt;br /&gt;
    background: #FFF9DB;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-move {&lt;br /&gt;
    background: #E4D8FF;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.cmbox-protection {&lt;br /&gt;
    background: #EFEFE1;    /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Other pages message box styles */&lt;br /&gt;
table.ombox {&lt;br /&gt;
    margin: 4px 10%; &lt;br /&gt;
    border-collapse: collapse; &lt;br /&gt;
    border: 1px solid #aaa;       /* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
    border: 1px solid #aaa;       /* Gray */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
    border: 1px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
    border: 1px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
    border: 1px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
    border: 2px solid #bba;       /* Gray-gold */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Talk page message box styles */&lt;br /&gt;
table.tmbox {&lt;br /&gt;
    margin: 4px 10%;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    border: 1px solid #c0c090;    /* Default &amp;quot;notice&amp;quot; gray-brown */&lt;br /&gt;
    background: #f8eaba;&lt;br /&gt;
}&lt;br /&gt;
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &amp;quot;mediawiki&amp;quot; class ensures that */&lt;br /&gt;
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */&lt;br /&gt;
    width: 100%;                 /* For Safari and Opera */&lt;br /&gt;
}&lt;br /&gt;
.mbox-inside .tmbox.mbox-small { /* &amp;quot;small&amp;quot; tmboxes should not be small when  */&lt;br /&gt;
    line-height: 1.5em;          /* also &amp;quot;nested&amp;quot;, so reset styles that are   */   &lt;br /&gt;
    font-size: 100%;             /* set in &amp;quot;mbox-small&amp;quot; above.                */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
table.tmbox-speedy {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
    background: #fee;             /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-delete {&lt;br /&gt;
    border: 2px solid #b22222;    /* Red */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-content {&lt;br /&gt;
    border: 2px solid #f28500;    /* Orange */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-style {&lt;br /&gt;
    border: 2px solid #f4c430;    /* Yellow */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-move {&lt;br /&gt;
    border: 2px solid #9932cc;    /* Purple */&lt;br /&gt;
}&lt;br /&gt;
table.tmbox-protection,&lt;br /&gt;
table.tmbox-notice {&lt;br /&gt;
    border: 1px solid #c0c090;    /* Gray-brown */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {ambox} */&lt;br /&gt;
table.ambox {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 0 10%;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  background:#FBFBFB;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  border-left: 10px solid #1E90FF&lt;br /&gt;
}&lt;br /&gt;
table.ambox th, table.ambox td {&lt;br /&gt;
  padding: 0.25em 0.5em;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-widthhack {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text {&lt;br /&gt;
  width:100%;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-text .ambox-text-small {&lt;br /&gt;
  font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 0 2px 0.5em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-imageright {&lt;br /&gt;
  width: 52px;&lt;br /&gt;
  padding: 2px 4px 2px 0;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
table.ambox td.ambox-image div,&lt;br /&gt;
table.ambox td.ambox-imageright div {width:52px} /* Фикс для изображений разной ширины */&lt;br /&gt;
table.ambox-delete,&lt;br /&gt;
table.ambox-serious {&lt;br /&gt;
  border-left: 10px solid #B22222&lt;br /&gt;
}&lt;br /&gt;
table.ambox-content {&lt;br /&gt;
  border-left: 10px solid #F28500&lt;br /&gt;
}&lt;br /&gt;
table.ambox-style {&lt;br /&gt;
  border-left: 10px solid #F4C430&lt;br /&gt;
}&lt;br /&gt;
table.ambox-good {&lt;br /&gt;
  border-left: 10px solid #66CC44&lt;br /&gt;
}&lt;br /&gt;
table.ambox-discussion {&lt;br /&gt;
  border-left: 10px solid #339966&lt;br /&gt;
}&lt;br /&gt;
table.ambox-notice {&lt;br /&gt;
  border-left: 10px solid #1E90ff&lt;br /&gt;
}&lt;br /&gt;
table.ambox-merge {&lt;br /&gt;
  border-left: 10px solid #9932CC&lt;br /&gt;
}&lt;br /&gt;
table.ambox.ambox-mini {&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  margin: 0 0 0.5em 1em;&lt;br /&gt;
  width: 20%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer and header message box styles */&lt;br /&gt;
table.fmbox {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;     /* Default &amp;quot;system&amp;quot; gray */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-system {&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-warning {&lt;br /&gt;
    border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
    background: #ffdbdb;        /* Pink */&lt;br /&gt;
}&lt;br /&gt;
table.fmbox-editnotice {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;warning&amp;quot; style fmbox messages. */&lt;br /&gt;
div.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #bb7070;&lt;br /&gt;
    background: #ffdbdb;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Div based &amp;quot;system&amp;quot; style fmbox messages. &lt;br /&gt;
   Used in [[MediaWiki:Readonly lag]]. */&lt;br /&gt;
div.mw-lag-warn-normal,&lt;br /&gt;
div.fmbox-system {&lt;br /&gt;
    clear: both;&lt;br /&gt;
    margin: 0.2em 0;&lt;br /&gt;
    border: 1px solid #aaa;&lt;br /&gt;
    background: #f9f9f9;&lt;br /&gt;
    padding: 0.25em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* These mbox-small classes must be placed after all other &lt;br /&gt;
   ambox/tmbox/ombox etc classes. &amp;quot;body.mediawiki&amp;quot; is so &lt;br /&gt;
   they override &amp;quot;table.ambox + table.ambox&amp;quot; above. */&lt;br /&gt;
body.mediawiki table.mbox-small {   /* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    clear: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    float: right;&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 0 4px 1em;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki table.mbox-small-left {   /* For the &amp;quot;small=left&amp;quot; option. */&lt;br /&gt;
    /* @noflip */&lt;br /&gt;
    margin: 4px 1em 4px 0;&lt;br /&gt;
    width: 238px;&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
    font-size: 88%;&lt;br /&gt;
    line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox {&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin-bottom: 0.5em;&lt;br /&gt;
  margin-left: 1em;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  float: right;&lt;br /&gt;
  clear: right;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  width: 18em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.infobox td, .infobox th {vertical-align:top}&lt;br /&gt;
table.infobox td p {margin:0} /* temporarily for [[Template:Карточка]]*/&lt;br /&gt;
&lt;br /&gt;
.notice {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
  margin: 1em 0.5em;&lt;br /&gt;
  padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox {&lt;br /&gt;
  border: thin solid #aaa;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  width: 88%;&lt;br /&gt;
  margin: 0 auto 1em auto;&lt;br /&gt;
  padding:.4em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-size: 90%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote {&lt;br /&gt;
  margin:0.7em 0 0.7em 5%;&lt;br /&gt;
  padding:0.7em 2% 0.7em 4%;&lt;br /&gt;
  background:#F5F5F5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ol.references {font-size:100%}&lt;br /&gt;
.references-small {font-size:90%}&lt;br /&gt;
/* highlight focused footnotes and references in some browsers */&lt;br /&gt;
sup.reference:target, ol.references li:target, .highlight-target:target, cite:target, span.citation:target {background:#DEF}&lt;br /&gt;
sup.reference:target {font-weight:bold}&lt;br /&gt;
/* scrollable references */&lt;br /&gt;
.references-scroll {&lt;br /&gt;
 overflow: auto;&lt;br /&gt;
 padding: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* fix for line-breaking references */&lt;br /&gt;
sup, sub {line-height:1em}&lt;br /&gt;
&lt;br /&gt;
.plainlinksneverexpand, .plainlinksneverexpand a&lt;br /&gt;
  {background:none !important; padding:0 !important}&lt;br /&gt;
.plainlinksneverexpand a.external.text:after,&lt;br /&gt;
.plainlinksneverexpand a.external.autonumber:after,&lt;br /&gt;
.plainlinksneverexpand .urlexpansion&lt;br /&gt;
  {display:none !important}&lt;br /&gt;
&lt;br /&gt;
.clickable-image a:hover {text-decoration: none}&lt;br /&gt;
&lt;br /&gt;
.printonly {display:none}&lt;br /&gt;
&lt;br /&gt;
.dablink, .rellink {font-style:italic; padding-left:1.6em}&lt;br /&gt;
&lt;br /&gt;
#disambig {border-top: 3px double #cccccc; border-bottom: 3px double #cccccc}&lt;br /&gt;
&lt;br /&gt;
/*{TOClimit} &amp;amp; TOC w/o numbers*/&lt;br /&gt;
.toclimit-2 .toclevel-2,&lt;br /&gt;
.toclimit-3 .toclevel-3,&lt;br /&gt;
.toclimit-4 .toclevel-4,&lt;br /&gt;
.toclimit-5 .toclevel-5,&lt;br /&gt;
.toclimit-6 .toclevel-6,&lt;br /&gt;
.toclimit-7 .toclevel-7, &lt;br /&gt;
.nonumtoc .tocnumber  {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* PDF icon next to external PDF link for Mozilla and Opera and for {PDFlink} template */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
a[href*=&amp;quot;.PDF#&amp;quot;].external,&lt;br /&gt;
span.PDFlink a {background: url(//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 18px !important}&lt;br /&gt;
&lt;br /&gt;
/* Clickable speaker in  {Template:Audio} ... */&lt;br /&gt;
.audiolink a {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png&amp;quot;) center left no-repeat !important;&lt;br /&gt;
  padding-left: 16px !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Medialist templates {Listen}, {Multi-listen_start}, {Video}, {Multi-video_start} */&lt;br /&gt;
div.listenlist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/3/3f/Gnome_speakernotes_30px.png&amp;quot;);&lt;br /&gt;
  padding-left: 40px;&lt;br /&gt;
}&lt;br /&gt;
div.videolist, div.multivideolist {&lt;br /&gt;
  background: url(&amp;quot;//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png&amp;quot;);&lt;br /&gt;
  padding-left: 50px;&lt;br /&gt;
}&lt;br /&gt;
div.medialist {&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  margin: 1em;&lt;br /&gt;
  background-position: top left;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul {&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
  list-style-image: none;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li {&lt;br /&gt;
  padding-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
div.medialist ul li li {&lt;br /&gt;
  font-size: 91%;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигация} */&lt;br /&gt;
table.navigation-box th,&lt;br /&gt;
table.navigation-box td {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {Навигационная таблица} */&lt;br /&gt;
table.navbox {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #aaa;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  margin: 1em 0em 0em;&lt;br /&gt;
  padding: 2px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th {&lt;br /&gt;
  background: #ccf;&lt;br /&gt;
  padding-left: 1em;&lt;br /&gt;
  padding-right: 1em;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
table.navbox th.navbox-title {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*{Навигационная полоса}, {Hider}, ... */&lt;br /&gt;
div.Boxmerge,&lt;br /&gt;
div.NavFrame {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 border:1px solid #aaa;&lt;br /&gt;
 text-align:center;&lt;br /&gt;
 border-collapse:collapse;&lt;br /&gt;
 font-size:95%;&lt;br /&gt;
}&lt;br /&gt;
div.Boxmerge div.NavFrame {&lt;br /&gt;
 border-style:none;&lt;br /&gt;
 border-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame + div.NavFrame {&lt;br /&gt;
 border-top-style:none;&lt;br /&gt;
 border-top-style:hidden;&lt;br /&gt;
}&lt;br /&gt;
div.NavPic {&lt;br /&gt;
 background:#fff;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:2px;&lt;br /&gt;
 float:left;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame div.NavHead {&lt;br /&gt;
 height:1.6em;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 font-size:100%;&lt;br /&gt;
 background:#efefef;&lt;br /&gt;
 position:relative;&lt;br /&gt;
}&lt;br /&gt;
div.NavFrame p,&lt;br /&gt;
div.NavFrame div.NavContent,&lt;br /&gt;
div.NavFrame div.NavContent p {&lt;br /&gt;
 font-size: 100%&lt;br /&gt;
}&lt;br /&gt;
div.NavEnd {&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
 line-height:1px;&lt;br /&gt;
 clear:both;&lt;br /&gt;
}&lt;br /&gt;
a.NavToggle {&lt;br /&gt;
 float:right;&lt;br /&gt;
 top:0;&lt;br /&gt;
 right:11px;&lt;br /&gt;
 font-weight:normal;&lt;br /&gt;
 font-size:smaller;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.messagebox.standard-talk {&lt;br /&gt;
  border: 1px solid #c0c090;&lt;br /&gt;
  background: #f8eaba&lt;br /&gt;
}&lt;br /&gt;
.messagebox .floatleft {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
.messagebox .image {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* {coord}s */&lt;br /&gt;
#coordinates {  &lt;br /&gt;
 position:absolute;&lt;br /&gt;
 z-index:1;&lt;br /&gt;
 right:9em;&lt;br /&gt;
 top:3.7em;&lt;br /&gt;
 float:right;&lt;br /&gt;
 line-height:1.5em;&lt;br /&gt;
 text-align:right;&lt;br /&gt;
 font-size:85%;&lt;br /&gt;
 white-space:nowrap;&lt;br /&gt;
}&lt;br /&gt;
#coordinates, .coordinates {&lt;br /&gt;
 text-transform:none;&lt;br /&gt;
 margin:0;&lt;br /&gt;
 padding:0;&lt;br /&gt;
}&lt;br /&gt;
.geo-google, .geo-osm, .geo-yandex {&lt;br /&gt;
 font-family:serif;&lt;br /&gt;
 font-weight:bold;&lt;br /&gt;
 line-height:1em;&lt;br /&gt;
}&lt;br /&gt;
.geo-geo-dec .geo-dec, .geo-geo-dms .geo-dms {display:inline}&lt;br /&gt;
.geo-geo-dec .geo-dms, .geo-geo-dms .geo-dec, .geo-multi-punct {display:none}&lt;br /&gt;
.geo-lat, .geo-lon {white-space:nowrap}&lt;br /&gt;
&lt;br /&gt;
.wp-templatelink { color:#9098A0 } /* {tl} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* FlaggedRevs */&lt;br /&gt;
.mw-fr-reviewlink, .fr-hist-basic-user, .fr-hist-basic-auto {font-weight:normal; font-size:smaller} &lt;br /&gt;
.flaggedrevs-pending {background:#ffc}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short {float:none; padding:1px}&lt;br /&gt;
.sitedir-ltr div.flaggedrevs_short_details {width:95%; display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Remove &amp;quot;external&amp;quot; icon from links to WP */&lt;br /&gt;
body.ns-talk a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;],&lt;br /&gt;
body.ns-4 a.external[href*=&amp;quot;//ru.wikipedia.org/&amp;quot;] {&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* [[bugzilla:35202]] */&lt;br /&gt;
#mw-fr-stablediff {text-align: left}&lt;br /&gt;
&lt;br /&gt;
/* Interwiki casing fix (remove after wmf6 (eb5bee43) is deployed) */&lt;br /&gt;
#p-lang li a { text-transform: capitalize !important }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#blackout {display:none}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#localNotice {&lt;br /&gt;
    margin-right: 5em !important; /* was 20% */&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-image: url(&#039;//upload.wikimedia.org/wikipedia/ru/b/bc/Wiki.png&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=54</id>
		<title>Стек</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=54"/>
		<updated>2013-02-23T14:01:00Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Откат правок Alvelcom (обсуждение) к версии Ctrlalt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общие сведения ==&lt;br /&gt;
Стек (англ. stack) &amp;amp;mdash; абстрактный контейнер, доступ к элементам которого организован по принципу «последним вошёл — первым вышел» (англ. LIFO, Last In &amp;amp;mdash; First Out). Эта особенность отражена в названии (stack &amp;amp;mdash; стопка): из лежащей на столе стопки листов бумаги можно взять только листок, лежащий на самом верху, а для доступа к листкам в середине стопки нужно сначала снять все находящиеся выше них.&lt;br /&gt;
&lt;br /&gt;
Принцип работы стека подразумевает абстрактное понятие &#039;&#039;вершины стека&#039;&#039; &amp;amp;mdash; места, в которое происходит добавление элементов и из которого происходит удаление элементов.&lt;br /&gt;
&lt;br /&gt;
==Интерфейс==&lt;br /&gt;
Стек должен поддерживать три основные операции:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(T value)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; вставка элемента &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt; в стек;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; извлечение элемента из стека;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool isEmpty()&amp;lt;/tt&amp;gt;     || &amp;amp;mdash; проверка стека на отсутствие элементов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Все три метода должны иметь константное время работы (O(1)).&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[[Демонстрация работы стека]]&lt;br /&gt;
&lt;br /&gt;
== Реализация на списке ==&lt;br /&gt;
Стек может быть реализован на односвязном списке. В этом случае каждый элемент стека хранит значение и указатель на следующий элемент. На вершину стека будет ссылаться указатель &amp;lt;tt&amp;gt;Node *top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 struct Node {&lt;br /&gt;
     int val;&lt;br /&gt;
     Node *next;&lt;br /&gt;
     Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
         val = v;&lt;br /&gt;
         next = n;&lt;br /&gt;
     }&lt;br /&gt;
 } *top;&lt;br /&gt;
&lt;br /&gt;
Тогда в конструкторе стека можно инициализировать указатель на вершину значением &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, так как стек изначально является пустым:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_list_isempty.png|thumb|right|Проверка стека на пустоту (реализация на списке)]]&lt;br /&gt;
Так как указатель &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; всегда ссылается на последний добавленный элемент стека, проверка на отсутствие элементов выполняется достаточно просто:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_list_push.png|thumb|right|Вставка в стек (реализация на списке)]]&lt;br /&gt;
Для вставки элемента в стек требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
*Фактически элемент добавляется в список, поэтому прежде всего нужно выделить память под новый экземпляр &amp;lt;tt&amp;gt;Node&amp;lt;/tt&amp;gt; и задать в нём нужное значение &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Вставка элемента происходит в вершину стека, поэтому следующим элементом для вставляемого будет тот, на который в данный момент указывает &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Наконец, вершина стека теперь должна указывать на добавленный элемент.&lt;br /&gt;
&lt;br /&gt;
Благодаря наличию конструктора &amp;lt;tt&amp;gt;Node(v, n)&amp;lt;/tt&amp;gt; все вышеописанные операции можно выполнить одной строкой:&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     top = new Node(value, top);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_list_pop.png|thumb|right|Извлечение из стека (реализация на списке)]]&lt;br /&gt;
Заметим, что извлечение элемента возможно только в том случае, когда стек не является пустым. Попытку извлечь элемент из пустого стека нужно должным образом обрабатывать (возбуждать исключение, возвращать специальное значение и т. д.).&lt;br /&gt;
&lt;br /&gt;
Удаление элемента из стека подразумевает следующую последовательность операций:&lt;br /&gt;
&lt;br /&gt;
*Так как необходимо вернуть извлечённое значение, но также и освободить память, отведённую под соответствующий элемент списка, требуется сохранить значение &amp;lt;tt&amp;gt;top-&amp;gt;val&amp;lt;/tt&amp;gt; во временной переменой для возможности последующего возврата;&lt;br /&gt;
*Указатель на вершину стека нужно сместить на следующий элемент, но перед этим нужно сохранить во временной переменной предыдущий адрес вершины, чтобы можно было освободить память;&lt;br /&gt;
*Далее можно освободить память и вернуть сохранённое ранее значение.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == NULL)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     int v = top-&amp;gt;val;&lt;br /&gt;
     Node *tmp = top;&lt;br /&gt;
     top = top-&amp;gt;next;&lt;br /&gt;
     delete tmp;&lt;br /&gt;
     return v;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на односвязном списке. Попытка извлечения из пустого стека выявляется с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     struct Node {&lt;br /&gt;
         int val;&lt;br /&gt;
         Node *next;&lt;br /&gt;
         Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
             val = v;&lt;br /&gt;
             next = n;&lt;br /&gt;
         }&lt;br /&gt;
     } *top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         top = new Node(value, top);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top != NULL);&lt;br /&gt;
         int v = top-&amp;gt;val;&lt;br /&gt;
         Node *tmp = top;&lt;br /&gt;
         top = top-&amp;gt;next;&lt;br /&gt;
         delete tmp;&lt;br /&gt;
         return v;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Реализация на массиве ==&lt;br /&gt;
Стек также можно реализовать на массиве. Основное ограничение, связанное с подобной реализацией, &amp;amp;mdash; конечный размер стека, переполнение которого нужно дополнительно отслеживать. Кроме того, при реализации на статических массивах стек будет всегда занимать объём памяти, пропорциональный максимальному количеству элементов (так как внутри стека объявлен массив фиксированного размера).&lt;br /&gt;
&lt;br /&gt;
Вершина стека при реализации на массиве может быть указана индексом &amp;lt;tt&amp;gt;int top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 static const int MAX_SIZE = 100;&lt;br /&gt;
 int a[MAX_SIZE];&lt;br /&gt;
 int top;&lt;br /&gt;
&lt;br /&gt;
При добавлении элементов индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет увеличиваться, при удалении &amp;amp;mdash; уменьшаться, что позволяет не перемещать сами хранимые элементы, а лишь изменять значение индекса. В конструкторе стека &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; инициализируется значением 0:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_array_isempty.png|thumb|right|Проверка стека на пустоту (реализация на массиве)]]&lt;br /&gt;
Как было показано ранее, при добавлении элементов в стек индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; увеличивается. В состоянии, когда стек пуст, &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет иметь минимальное значение:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_array_push.png|thumb|right|Вставка в стек (реализация на массиве)]]&lt;br /&gt;
Новый элемент вставляется в то место, на которое указывает индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;. Сам индекс после вставки необходимо увеличить.&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     if (top + 1 == MAX_SIZE)&lt;br /&gt;
         /* обработка ошибки - переполнение стека */&lt;br /&gt;
     a[top++] = value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_array_pop.png|thumb|right|Извлечение из стека (реализация на массиве)]]&lt;br /&gt;
Аналогично предыдущей реализации, должна иметь место проверка на извлечение из пустого стека. Удаление элемента в данном случае подразумевает только сдвиг индекса &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; назад.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == 0)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     return a[--top];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на массиве. Переполнение стека и попытка извлечения из пустого стека выявляются с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     static const int MAX_SIZE = 100;&lt;br /&gt;
     int a[MAX_SIZE];&lt;br /&gt;
     int top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         assert(top + 1 &amp;lt; MAX_SIZE);&lt;br /&gt;
         a[top++] = value;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top &amp;gt; 0);&lt;br /&gt;
         return a[--top];&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Стек в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;stack&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stack&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     stack&amp;lt;int&amp;gt; s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.push(i);&lt;br /&gt;
     while (!s.empty()) {&lt;br /&gt;
         cout &amp;lt;&amp;lt; s.top() &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
         s.pop();&lt;br /&gt;
     }            &lt;br /&gt;
     return 0;       //результат &amp;quot;5 4 3 2 1 &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для стека:&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;	         || &amp;amp;mdash; конструктор;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(const T&amp;amp; x)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; добавление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; удаление элемента. Обратите внимание на то, что значение удаляемого элемента не возвращается;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T&amp;amp; top()&amp;lt;/tt&amp;gt;              || &amp;amp;mdash; получение значения элемента на вершине стека. Этот метод не производит удаление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty()&amp;lt;/tt&amp;gt;          || &amp;amp;mdash; проверка на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size()&amp;lt;/tt&amp;gt;         || &amp;amp;mdash; получение количества элементов в стеке. Метод возвращает беззнаковое целое число.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Учебный курс &amp;amp;laquo;Алгоритмы и структуры данных&amp;amp;raquo;]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=53</id>
		<title>Стек</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=53"/>
		<updated>2013-02-23T13:45:16Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общие сведения ==&lt;br /&gt;
{{Содержание справа}}&lt;br /&gt;
Стек (англ. stack) &amp;amp;mdash; абстрактный контейнер, доступ к элементам которого организован по принципу «последним вошёл — первым вышел» (англ. LIFO, Last In &amp;amp;mdash; First Out). Эта особенность отражена в названии (stack &amp;amp;mdash; стопка): из лежащей на столе стопки листов бумаги можно взять только листок, лежащий на самом верху, а для доступа к листкам в середине стопки нужно сначала снять все находящиеся выше них.&lt;br /&gt;
&lt;br /&gt;
Принцип работы стека подразумевает абстрактное понятие &#039;&#039;вершины стека&#039;&#039; &amp;amp;mdash; места, в которое происходит добавление элементов и из которого происходит удаление элементов.&lt;br /&gt;
&lt;br /&gt;
{{SoftH2|Интерфейс}}&lt;br /&gt;
Стек должен поддерживать три основные операции:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(T value)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; вставка элемента &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt; в стек;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; извлечение элемента из стека;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool isEmpty()&amp;lt;/tt&amp;gt;     || &amp;amp;mdash; проверка стека на отсутствие элементов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Все три метода должны иметь константное время работы (O(1)).&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[[Демонстрация работы стека]]&lt;br /&gt;
&lt;br /&gt;
== Реализация на списке ==&lt;br /&gt;
Стек может быть реализован на односвязном списке. В этом случае каждый элемент стека хранит значение и указатель на следующий элемент. На вершину стека будет ссылаться указатель &amp;lt;tt&amp;gt;Node *top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 struct Node {&lt;br /&gt;
     int val;&lt;br /&gt;
     Node *next;&lt;br /&gt;
     Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
         val = v;&lt;br /&gt;
         next = n;&lt;br /&gt;
     }&lt;br /&gt;
 } *top;&lt;br /&gt;
&lt;br /&gt;
Тогда в конструкторе стека можно инициализировать указатель на вершину значением &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, так как стек изначально является пустым:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_list_isempty.png|thumb|right|Проверка стека на пустоту (реализация на списке)]]&lt;br /&gt;
Так как указатель &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; всегда ссылается на последний добавленный элемент стека, проверка на отсутствие элементов выполняется достаточно просто:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_list_push.png|thumb|right|Вставка в стек (реализация на списке)]]&lt;br /&gt;
Для вставки элемента в стек требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
*Фактически элемент добавляется в список, поэтому прежде всего нужно выделить память под новый экземпляр &amp;lt;tt&amp;gt;Node&amp;lt;/tt&amp;gt; и задать в нём нужное значение &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Вставка элемента происходит в вершину стека, поэтому следующим элементом для вставляемого будет тот, на который в данный момент указывает &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Наконец, вершина стека теперь должна указывать на добавленный элемент.&lt;br /&gt;
&lt;br /&gt;
Благодаря наличию конструктора &amp;lt;tt&amp;gt;Node(v, n)&amp;lt;/tt&amp;gt; все вышеописанные операции можно выполнить одной строкой:&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     top = new Node(value, top);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_list_pop.png|thumb|right|Извлечение из стека (реализация на списке)]]&lt;br /&gt;
Заметим, что извлечение элемента возможно только в том случае, когда стек не является пустым. Попытку извлечь элемент из пустого стека нужно должным образом обрабатывать (возбуждать исключение, возвращать специальное значение и т. д.).&lt;br /&gt;
&lt;br /&gt;
Удаление элемента из стека подразумевает следующую последовательность операций:&lt;br /&gt;
&lt;br /&gt;
*Так как необходимо вернуть извлечённое значение, но также и освободить память, отведённую под соответствующий элемент списка, требуется сохранить значение &amp;lt;tt&amp;gt;top-&amp;gt;val&amp;lt;/tt&amp;gt; во временной переменой для возможности последующего возврата;&lt;br /&gt;
*Указатель на вершину стека нужно сместить на следующий элемент, но перед этим нужно сохранить во временной переменной предыдущий адрес вершины, чтобы можно было освободить память;&lt;br /&gt;
*Далее можно освободить память и вернуть сохранённое ранее значение.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == NULL)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     int v = top-&amp;gt;val;&lt;br /&gt;
     Node *tmp = top;&lt;br /&gt;
     top = top-&amp;gt;next;&lt;br /&gt;
     delete tmp;&lt;br /&gt;
     return v;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на односвязном списке. Попытка извлечения из пустого стека выявляется с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     struct Node {&lt;br /&gt;
         int val;&lt;br /&gt;
         Node *next;&lt;br /&gt;
         Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
             val = v;&lt;br /&gt;
             next = n;&lt;br /&gt;
         }&lt;br /&gt;
     } *top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         top = new Node(value, top);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top != NULL);&lt;br /&gt;
         int v = top-&amp;gt;val;&lt;br /&gt;
         Node *tmp = top;&lt;br /&gt;
         top = top-&amp;gt;next;&lt;br /&gt;
         delete tmp;&lt;br /&gt;
         return v;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Реализация на массиве ==&lt;br /&gt;
Стек также можно реализовать на массиве. Основное ограничение, связанное с подобной реализацией, &amp;amp;mdash; конечный размер стека, переполнение которого нужно дополнительно отслеживать. Кроме того, при реализации на статических массивах стек будет всегда занимать объём памяти, пропорциональный максимальному количеству элементов (так как внутри стека объявлен массив фиксированного размера).&lt;br /&gt;
&lt;br /&gt;
Вершина стека при реализации на массиве может быть указана индексом &amp;lt;tt&amp;gt;int top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 static const int MAX_SIZE = 100;&lt;br /&gt;
 int a[MAX_SIZE];&lt;br /&gt;
 int top;&lt;br /&gt;
&lt;br /&gt;
При добавлении элементов индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет увеличиваться, при удалении &amp;amp;mdash; уменьшаться, что позволяет не перемещать сами хранимые элементы, а лишь изменять значение индекса. В конструкторе стека &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; инициализируется значением 0:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_array_isempty.png|thumb|right|Проверка стека на пустоту (реализация на массиве)]]&lt;br /&gt;
Как было показано ранее, при добавлении элементов в стек индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; увеличивается. В состоянии, когда стек пуст, &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет иметь минимальное значение:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_array_push.png|thumb|right|Вставка в стек (реализация на массиве)]]&lt;br /&gt;
Новый элемент вставляется в то место, на которое указывает индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;. Сам индекс после вставки необходимо увеличить.&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     if (top + 1 == MAX_SIZE)&lt;br /&gt;
         /* обработка ошибки - переполнение стека */&lt;br /&gt;
     a[top++] = value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_array_pop.png|thumb|right|Извлечение из стека (реализация на массиве)]]&lt;br /&gt;
Аналогично предыдущей реализации, должна иметь место проверка на извлечение из пустого стека. Удаление элемента в данном случае подразумевает только сдвиг индекса &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; назад.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == 0)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     return a[--top];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на массиве. Переполнение стека и попытка извлечения из пустого стека выявляются с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     static const int MAX_SIZE = 100;&lt;br /&gt;
     int a[MAX_SIZE];&lt;br /&gt;
     int top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         assert(top + 1 &amp;lt; MAX_SIZE);&lt;br /&gt;
         a[top++] = value;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top &amp;gt; 0);&lt;br /&gt;
         return a[--top];&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Стек в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;stack&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stack&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     stack&amp;lt;int&amp;gt; s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.push(i);&lt;br /&gt;
     while (!s.empty()) {&lt;br /&gt;
         cout &amp;lt;&amp;lt; s.top() &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
         s.pop();&lt;br /&gt;
     }            &lt;br /&gt;
     return 0;       //результат &amp;quot;5 4 3 2 1 &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для стека:&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;	         || &amp;amp;mdash; конструктор;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(const T&amp;amp; x)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; добавление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; удаление элемента. Обратите внимание на то, что значение удаляемого элемента не возвращается;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T&amp;amp; top()&amp;lt;/tt&amp;gt;              || &amp;amp;mdash; получение значения элемента на вершине стека. Этот метод не производит удаление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty()&amp;lt;/tt&amp;gt;          || &amp;amp;mdash; проверка на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size()&amp;lt;/tt&amp;gt;         || &amp;amp;mdash; получение количества элементов в стеке. Метод возвращает беззнаковое целое число.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Учебный курс &amp;amp;laquo;Алгоритмы и структуры данных&amp;amp;raquo;]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=52</id>
		<title>Шаблон:SoftH2</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=52"/>
		<updated>2013-02-23T13:45:05Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2 style=&amp;quot;width:auto&amp;quot;&amp;gt;{{{1}}}&amp;lt;/h2&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=51</id>
		<title>Шаблон:SoftH2</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=51"/>
		<updated>2013-02-23T13:42:59Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2 style=&amp;quot;width:none&amp;quot;&amp;gt;{{{1}}}&amp;lt;/h2&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=50</id>
		<title>Шаблон:SoftH2</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=50"/>
		<updated>2013-02-23T13:42:35Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2 style=&amp;quot;width:none&amp;quot;&amp;gt;{{#1}}&amp;lt;/h2&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=49</id>
		<title>Шаблон:SoftH2</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:SoftH2&amp;diff=49"/>
		<updated>2013-02-23T13:41:49Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Новая страница: «&amp;lt;h2 style=&amp;quot;width:none&amp;quot;&amp;gt;{{1}}&amp;lt;/h2&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2 style=&amp;quot;width:none&amp;quot;&amp;gt;{{1}}&amp;lt;/h2&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=48</id>
		<title>Стек</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=48"/>
		<updated>2013-02-23T13:38:08Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общие сведения ==&lt;br /&gt;
{{Содержание справа}}&lt;br /&gt;
Стек (англ. stack) &amp;amp;mdash; абстрактный контейнер, доступ к элементам которого организован по принципу «последним вошёл — первым вышел» (англ. LIFO, Last In &amp;amp;mdash; First Out). Эта особенность отражена в названии (stack &amp;amp;mdash; стопка): из лежащей на столе стопки листов бумаги можно взять только листок, лежащий на самом верху, а для доступа к листкам в середине стопки нужно сначала снять все находящиеся выше них.&lt;br /&gt;
&lt;br /&gt;
Принцип работы стека подразумевает абстрактное понятие &#039;&#039;вершины стека&#039;&#039; &amp;amp;mdash; места, в которое происходит добавление элементов и из которого происходит удаление элементов.&lt;br /&gt;
&lt;br /&gt;
==Интерфейс==&lt;br /&gt;
Стек должен поддерживать три основные операции:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(T value)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; вставка элемента &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt; в стек;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; извлечение элемента из стека;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool isEmpty()&amp;lt;/tt&amp;gt;     || &amp;amp;mdash; проверка стека на отсутствие элементов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Все три метода должны иметь константное время работы (O(1)).&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[[Демонстрация работы стека]]&lt;br /&gt;
&lt;br /&gt;
== Реализация на списке ==&lt;br /&gt;
Стек может быть реализован на односвязном списке. В этом случае каждый элемент стека хранит значение и указатель на следующий элемент. На вершину стека будет ссылаться указатель &amp;lt;tt&amp;gt;Node *top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 struct Node {&lt;br /&gt;
     int val;&lt;br /&gt;
     Node *next;&lt;br /&gt;
     Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
         val = v;&lt;br /&gt;
         next = n;&lt;br /&gt;
     }&lt;br /&gt;
 } *top;&lt;br /&gt;
&lt;br /&gt;
Тогда в конструкторе стека можно инициализировать указатель на вершину значением &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, так как стек изначально является пустым:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_list_isempty.png|thumb|right|Проверка стека на пустоту (реализация на списке)]]&lt;br /&gt;
Так как указатель &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; всегда ссылается на последний добавленный элемент стека, проверка на отсутствие элементов выполняется достаточно просто:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_list_push.png|thumb|right|Вставка в стек (реализация на списке)]]&lt;br /&gt;
Для вставки элемента в стек требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
*Фактически элемент добавляется в список, поэтому прежде всего нужно выделить память под новый экземпляр &amp;lt;tt&amp;gt;Node&amp;lt;/tt&amp;gt; и задать в нём нужное значение &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Вставка элемента происходит в вершину стека, поэтому следующим элементом для вставляемого будет тот, на который в данный момент указывает &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Наконец, вершина стека теперь должна указывать на добавленный элемент.&lt;br /&gt;
&lt;br /&gt;
Благодаря наличию конструктора &amp;lt;tt&amp;gt;Node(v, n)&amp;lt;/tt&amp;gt; все вышеописанные операции можно выполнить одной строкой:&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     top = new Node(value, top);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_list_pop.png|thumb|right|Извлечение из стека (реализация на списке)]]&lt;br /&gt;
Заметим, что извлечение элемента возможно только в том случае, когда стек не является пустым. Попытку извлечь элемент из пустого стека нужно должным образом обрабатывать (возбуждать исключение, возвращать специальное значение и т. д.).&lt;br /&gt;
&lt;br /&gt;
Удаление элемента из стека подразумевает следующую последовательность операций:&lt;br /&gt;
&lt;br /&gt;
*Так как необходимо вернуть извлечённое значение, но также и освободить память, отведённую под соответствующий элемент списка, требуется сохранить значение &amp;lt;tt&amp;gt;top-&amp;gt;val&amp;lt;/tt&amp;gt; во временной переменой для возможности последующего возврата;&lt;br /&gt;
*Указатель на вершину стека нужно сместить на следующий элемент, но перед этим нужно сохранить во временной переменной предыдущий адрес вершины, чтобы можно было освободить память;&lt;br /&gt;
*Далее можно освободить память и вернуть сохранённое ранее значение.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == NULL)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     int v = top-&amp;gt;val;&lt;br /&gt;
     Node *tmp = top;&lt;br /&gt;
     top = top-&amp;gt;next;&lt;br /&gt;
     delete tmp;&lt;br /&gt;
     return v;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на односвязном списке. Попытка извлечения из пустого стека выявляется с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     struct Node {&lt;br /&gt;
         int val;&lt;br /&gt;
         Node *next;&lt;br /&gt;
         Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
             val = v;&lt;br /&gt;
             next = n;&lt;br /&gt;
         }&lt;br /&gt;
     } *top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         top = new Node(value, top);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top != NULL);&lt;br /&gt;
         int v = top-&amp;gt;val;&lt;br /&gt;
         Node *tmp = top;&lt;br /&gt;
         top = top-&amp;gt;next;&lt;br /&gt;
         delete tmp;&lt;br /&gt;
         return v;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Реализация на массиве ==&lt;br /&gt;
Стек также можно реализовать на массиве. Основное ограничение, связанное с подобной реализацией, &amp;amp;mdash; конечный размер стека, переполнение которого нужно дополнительно отслеживать. Кроме того, при реализации на статических массивах стек будет всегда занимать объём памяти, пропорциональный максимальному количеству элементов (так как внутри стека объявлен массив фиксированного размера).&lt;br /&gt;
&lt;br /&gt;
Вершина стека при реализации на массиве может быть указана индексом &amp;lt;tt&amp;gt;int top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 static const int MAX_SIZE = 100;&lt;br /&gt;
 int a[MAX_SIZE];&lt;br /&gt;
 int top;&lt;br /&gt;
&lt;br /&gt;
При добавлении элементов индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет увеличиваться, при удалении &amp;amp;mdash; уменьшаться, что позволяет не перемещать сами хранимые элементы, а лишь изменять значение индекса. В конструкторе стека &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; инициализируется значением 0:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_array_isempty.png|thumb|right|Проверка стека на пустоту (реализация на массиве)]]&lt;br /&gt;
Как было показано ранее, при добавлении элементов в стек индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; увеличивается. В состоянии, когда стек пуст, &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет иметь минимальное значение:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_array_push.png|thumb|right|Вставка в стек (реализация на массиве)]]&lt;br /&gt;
Новый элемент вставляется в то место, на которое указывает индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;. Сам индекс после вставки необходимо увеличить.&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     if (top + 1 == MAX_SIZE)&lt;br /&gt;
         /* обработка ошибки - переполнение стека */&lt;br /&gt;
     a[top++] = value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_array_pop.png|thumb|right|Извлечение из стека (реализация на массиве)]]&lt;br /&gt;
Аналогично предыдущей реализации, должна иметь место проверка на извлечение из пустого стека. Удаление элемента в данном случае подразумевает только сдвиг индекса &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; назад.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == 0)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     return a[--top];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на массиве. Переполнение стека и попытка извлечения из пустого стека выявляются с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     static const int MAX_SIZE = 100;&lt;br /&gt;
     int a[MAX_SIZE];&lt;br /&gt;
     int top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         assert(top + 1 &amp;lt; MAX_SIZE);&lt;br /&gt;
         a[top++] = value;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top &amp;gt; 0);&lt;br /&gt;
         return a[--top];&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Стек в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;stack&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stack&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     stack&amp;lt;int&amp;gt; s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.push(i);&lt;br /&gt;
     while (!s.empty()) {&lt;br /&gt;
         cout &amp;lt;&amp;lt; s.top() &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
         s.pop();&lt;br /&gt;
     }            &lt;br /&gt;
     return 0;       //результат &amp;quot;5 4 3 2 1 &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для стека:&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;	         || &amp;amp;mdash; конструктор;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(const T&amp;amp; x)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; добавление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; удаление элемента. Обратите внимание на то, что значение удаляемого элемента не возвращается;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T&amp;amp; top()&amp;lt;/tt&amp;gt;              || &amp;amp;mdash; получение значения элемента на вершине стека. Этот метод не производит удаление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty()&amp;lt;/tt&amp;gt;          || &amp;amp;mdash; проверка на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size()&amp;lt;/tt&amp;gt;         || &amp;amp;mdash; получение количества элементов в стеке. Метод возвращает беззнаковое целое число.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Учебный курс &amp;amp;laquo;Алгоритмы и структуры данных&amp;amp;raquo;]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0&amp;diff=47</id>
		<title>Шаблон:Содержание справа</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0&amp;diff=47"/>
		<updated>2013-02-23T13:36:06Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Alvelcom переименовал страницу Обсуждение MediaWiki:Содержание справа в Шаблон:Содержание справа без оставления перенаправления&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Оригинал http://creationwiki.org/ru/Шаблон:Содержание_справа [[Категория:Шаблоны| ]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| align=&amp;quot;right&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;clear:right; margin-bottom: .5em; float: right; padding: .5em 0 .8em 1.4em; background: none;&amp;quot; &lt;br /&gt;
 | __TOC__  &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0&amp;diff=46</id>
		<title>Шаблон:Содержание справа</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0&amp;diff=46"/>
		<updated>2013-02-23T13:35:32Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Alvelcom переименовал страницу Шаблоны:Содержание справа в Обсуждение MediaWiki:Содержание справа без оставления перенаправления&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Оригинал http://creationwiki.org/ru/Шаблон:Содержание_справа [[Категория:Шаблоны| ]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| align=&amp;quot;right&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;clear:right; margin-bottom: .5em; float: right; padding: .5em 0 .8em 1.4em; background: none;&amp;quot; &lt;br /&gt;
 | __TOC__  &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0&amp;diff=45</id>
		<title>Шаблон:Содержание справа</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0&amp;diff=45"/>
		<updated>2013-02-23T13:34:18Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: Новая страница: «&amp;lt;noinclude&amp;gt;Оригинал http://creationwiki.org/ru/Шаблон:Содержание_справа  &amp;lt;/noinclude&amp;gt; {| align…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Оригинал http://creationwiki.org/ru/Шаблон:Содержание_справа [[Категория:Шаблоны| ]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| align=&amp;quot;right&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;clear:right; margin-bottom: .5em; float: right; padding: .5em 0 .8em 1.4em; background: none;&amp;quot; &lt;br /&gt;
 | __TOC__  &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=42</id>
		<title>Стек</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%A1%D1%82%D0%B5%D0%BA&amp;diff=42"/>
		<updated>2013-02-23T13:11:51Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: /* Извлечение элемента */ Скобочку забыли&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общие сведения ==&lt;br /&gt;
Стек (англ. stack) &amp;amp;mdash; абстрактный контейнер, доступ к элементам которого организован по принципу «последним вошёл — первым вышел» (англ. LIFO, Last In &amp;amp;mdash; First Out). Эта особенность отражена в названии (stack &amp;amp;mdash; стопка): из лежащей на столе стопки листов бумаги можно взять только листок, лежащий на самом верху, а для доступа к листкам в середине стопки нужно сначала снять все находящиеся выше них.&lt;br /&gt;
&lt;br /&gt;
Принцип работы стека подразумевает абстрактное понятие &#039;&#039;вершины стека&#039;&#039; &amp;amp;mdash; места, в которое происходит добавление элементов и из которого происходит удаление элементов.&lt;br /&gt;
&lt;br /&gt;
==Интерфейс==&lt;br /&gt;
Стек должен поддерживать три основные операции:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(T value)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; вставка элемента &amp;lt;tt&amp;gt;value&amp;lt;/tt&amp;gt; в стек;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; извлечение элемента из стека;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool isEmpty()&amp;lt;/tt&amp;gt;     || &amp;amp;mdash; проверка стека на отсутствие элементов.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Все три метода должны иметь константное время работы (O(1)).&lt;br /&gt;
&lt;br /&gt;
== Демонстрация работы ==&lt;br /&gt;
[[Демонстрация работы стека]]&lt;br /&gt;
&lt;br /&gt;
== Реализация на списке ==&lt;br /&gt;
Стек может быть реализован на односвязном списке. В этом случае каждый элемент стека хранит значение и указатель на следующий элемент. На вершину стека будет ссылаться указатель &amp;lt;tt&amp;gt;Node *top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 struct Node {&lt;br /&gt;
     int val;&lt;br /&gt;
     Node *next;&lt;br /&gt;
     Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
         val = v;&lt;br /&gt;
         next = n;&lt;br /&gt;
     }&lt;br /&gt;
 } *top;&lt;br /&gt;
&lt;br /&gt;
Тогда в конструкторе стека можно инициализировать указатель на вершину значением &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, так как стек изначально является пустым:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_list_isempty.png|thumb|right|Проверка стека на пустоту (реализация на списке)]]&lt;br /&gt;
Так как указатель &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; всегда ссылается на последний добавленный элемент стека, проверка на отсутствие элементов выполняется достаточно просто:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == NULL;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_list_push.png|thumb|right|Вставка в стек (реализация на списке)]]&lt;br /&gt;
Для вставки элемента в стек требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
*Фактически элемент добавляется в список, поэтому прежде всего нужно выделить память под новый экземпляр &amp;lt;tt&amp;gt;Node&amp;lt;/tt&amp;gt; и задать в нём нужное значение &amp;lt;tt&amp;gt;val&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Вставка элемента происходит в вершину стека, поэтому следующим элементом для вставляемого будет тот, на который в данный момент указывает &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;;&lt;br /&gt;
*Наконец, вершина стека теперь должна указывать на добавленный элемент.&lt;br /&gt;
&lt;br /&gt;
Благодаря наличию конструктора &amp;lt;tt&amp;gt;Node(v, n)&amp;lt;/tt&amp;gt; все вышеописанные операции можно выполнить одной строкой:&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     top = new Node(value, top);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_list_pop.png|thumb|right|Извлечение из стека (реализация на списке)]]&lt;br /&gt;
Заметим, что извлечение элемента возможно только в том случае, когда стек не является пустым. Попытку извлечь элемент из пустого стека нужно должным образом обрабатывать (возбуждать исключение, возвращать специальное значение и т. д.).&lt;br /&gt;
&lt;br /&gt;
Удаление элемента из стека подразумевает следующую последовательность операций:&lt;br /&gt;
&lt;br /&gt;
*Так как необходимо вернуть извлечённое значение, но также и освободить память, отведённую под соответствующий элемент списка, требуется сохранить значение &amp;lt;tt&amp;gt;top-&amp;gt;val&amp;lt;/tt&amp;gt; во временной переменой для возможности последующего возврата;&lt;br /&gt;
*Указатель на вершину стека нужно сместить на следующий элемент, но перед этим нужно сохранить во временной переменной предыдущий адрес вершины, чтобы можно было освободить память;&lt;br /&gt;
*Далее можно освободить память и вернуть сохранённое ранее значение.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == NULL)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     int v = top-&amp;gt;val;&lt;br /&gt;
     Node *tmp = top;&lt;br /&gt;
     top = top-&amp;gt;next;&lt;br /&gt;
     delete tmp;&lt;br /&gt;
     return v;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на односвязном списке. Попытка извлечения из пустого стека выявляется с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     struct Node {&lt;br /&gt;
         int val;&lt;br /&gt;
         Node *next;&lt;br /&gt;
         Node(int v = 0, Node *n = NULL) {&lt;br /&gt;
             val = v;&lt;br /&gt;
             next = n;&lt;br /&gt;
         }&lt;br /&gt;
     } *top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         top = new Node(value, top);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top != NULL);&lt;br /&gt;
         int v = top-&amp;gt;val;&lt;br /&gt;
         Node *tmp = top;&lt;br /&gt;
         top = top-&amp;gt;next;&lt;br /&gt;
         delete tmp;&lt;br /&gt;
         return v;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == NULL;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Реализация на массиве ==&lt;br /&gt;
Стек также можно реализовать на массиве. Основное ограничение, связанное с подобной реализацией, &amp;amp;mdash; конечный размер стека, переполнение которого нужно дополнительно отслеживать. Кроме того, при реализации на статических массивах стек будет всегда занимать объём памяти, пропорциональный максимальному количеству элементов (так как внутри стека объявлен массив фиксированного размера).&lt;br /&gt;
&lt;br /&gt;
Вершина стека при реализации на массиве может быть указана индексом &amp;lt;tt&amp;gt;int top&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 static const int MAX_SIZE = 100;&lt;br /&gt;
 int a[MAX_SIZE];&lt;br /&gt;
 int top;&lt;br /&gt;
&lt;br /&gt;
При добавлении элементов индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет увеличиваться, при удалении &amp;amp;mdash; уменьшаться, что позволяет не перемещать сами хранимые элементы, а лишь изменять значение индекса. В конструкторе стека &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; инициализируется значением 0:&lt;br /&gt;
&lt;br /&gt;
 Stack() {&lt;br /&gt;
     top = 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Проверка на пустоту ===&lt;br /&gt;
[[Файл:stack_array_isempty.png|thumb|right|Проверка стека на пустоту (реализация на массиве)]]&lt;br /&gt;
Как было показано ранее, при добавлении элементов в стек индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; увеличивается. В состоянии, когда стек пуст, &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; будет иметь минимальное значение:&lt;br /&gt;
&lt;br /&gt;
 bool isEmpty() {&lt;br /&gt;
     return top == 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Вставка элемента ===&lt;br /&gt;
[[Файл:stack_array_push.png|thumb|right|Вставка в стек (реализация на массиве)]]&lt;br /&gt;
Новый элемент вставляется в то место, на которое указывает индекс &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt;. Сам индекс после вставки необходимо увеличить.&lt;br /&gt;
&lt;br /&gt;
 void push(int value) {&lt;br /&gt;
     if (top + 1 == MAX_SIZE)&lt;br /&gt;
         /* обработка ошибки - переполнение стека */&lt;br /&gt;
     a[top++] = value;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Извлечение элемента ===&lt;br /&gt;
[[Файл:stack_array_pop.png|thumb|right|Извлечение из стека (реализация на массиве)]]&lt;br /&gt;
Аналогично предыдущей реализации, должна иметь место проверка на извлечение из пустого стека. Удаление элемента в данном случае подразумевает только сдвиг индекса &amp;lt;tt&amp;gt;top&amp;lt;/tt&amp;gt; назад.&lt;br /&gt;
&lt;br /&gt;
 int pop() {&lt;br /&gt;
     if (top == 0)&lt;br /&gt;
         /* обработка ошибки - нет элементов для извлечения */&lt;br /&gt;
     return a[--top];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ниже приведён полный код реализации стека на массиве. Переполнение стека и попытка извлечения из пустого стека выявляются с помощью конструкции [http://www.cplusplus.com/reference/cassert/assert/ assert] (заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;assert.h&amp;gt;&amp;lt;/tt&amp;gt; либо &amp;lt;tt&amp;gt;&amp;lt;cassert&amp;gt;&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 class Stack {&lt;br /&gt;
 &lt;br /&gt;
     static const int MAX_SIZE = 100;&lt;br /&gt;
     int a[MAX_SIZE];&lt;br /&gt;
     int top;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 &lt;br /&gt;
     Stack() {&lt;br /&gt;
         top = 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void push(int value) {&lt;br /&gt;
         assert (top + 1 &amp;lt; MAX_SIZE);&lt;br /&gt;
         a[top++] = value;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     int pop() {&lt;br /&gt;
         assert(top &amp;gt; 0);&lt;br /&gt;
         return a[--top];&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     bool isEmpty() {&lt;br /&gt;
         return top == 0;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Стек в STL ==&lt;br /&gt;
В стандартной библиотеке шаблонов C++ присутствует шаблон &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;&amp;lt;/tt&amp;gt;. Для возможности его использования требуется подключить заголовочный файл &amp;lt;tt&amp;gt;&amp;lt;stack&amp;gt;&amp;lt;/tt&amp;gt; и пространство имён &amp;lt;tt&amp;gt;std&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;stack&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main() {&lt;br /&gt;
     stack s;&lt;br /&gt;
     for (int i = 1; i &amp;lt; 6; i++)&lt;br /&gt;
         s.push(i);&lt;br /&gt;
     while (!s.empty()) {&lt;br /&gt;
         cout &amp;lt;&amp;lt; s.top() &amp;lt;&amp;lt; &#039; &#039;;&lt;br /&gt;
         s.pop();&lt;br /&gt;
     }            &lt;br /&gt;
     return 0;       //результат &amp;quot;5 4 3 2 1 &amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
STL предоставляет следующий набор методов для стека:&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;stack&amp;lt;T&amp;gt;()&amp;lt;/tt&amp;gt;	         || &amp;amp;mdash; конструктор;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void push(const T&amp;amp; x)&amp;lt;/tt&amp;gt; || &amp;amp;mdash; добавление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;void pop()&amp;lt;/tt&amp;gt;            || &amp;amp;mdash; удаление элемента. Обратите внимание на то, что значение удаляемого элемента не возвращается;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;T&amp;amp; top()&amp;lt;/tt&amp;gt;              || &amp;amp;mdash; получение значения элемента на вершине стека. Этот метод не производит удаление элемента;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bool empty()&amp;lt;/tt&amp;gt;          || &amp;amp;mdash; проверка на пустоту;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;size_t size()&amp;lt;/tt&amp;gt;         || &amp;amp;mdash; получение количества элементов в стеке. Метод возвращает беззнаковое целое число.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Учебный курс &amp;amp;laquo;Алгоритмы и структуры данных&amp;amp;raquo;]]&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=20</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=MediaWiki:Common.css&amp;diff=20"/>
		<updated>2013-02-23T10:58:08Z</updated>

		<summary type="html">&lt;p&gt;Alvelcom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
&lt;br /&gt;
h2 {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h3 {&lt;br /&gt;
width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p, ul, ol {&lt;br /&gt;
text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
width: 50%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** haha **/&lt;/div&gt;</summary>
		<author><name>Alvelcom</name></author>
	</entry>
</feed>