40
правок
Изменения
Нет описания правки
==Постановка задачиОсновная идея==Стандартное декартово Напомним, '''[[Декартово дерево (или любое другое сбалансированное ]]''' {{---}} это структура данных, объединяющая в себе бинарное дерево поискаи бинарную кучу. Для решения задачи, мы будем рассматривать именно это применение декартовых деревьев) позволяет нам совершать практически любые операции, собственнопоставленной в предыдущей главе, вставить или удалить элементпопробуем слегка модифицировать эту структуру. Попробуем расширить список действийЕсли конкретнее, которые мы хотим уметь делатьто оставим в нем только один ключ - ключ <tex>Y</tex>. Основной принцип расширения можно описать так Вместо второго ключа будем использовать следующую величину: '''взять элементы количество элементов в нашей структуре, находящихся левее нашего элемента'''. Если проще, то будем считать ключом порядковый номер нашего элемента в дереве, уменьшенный на единицу. Заметим, что при этом сохранится структура [[Дерево_поиска,_наивная_реализация|двоичного дерева поиска]] по этому ключу(т.е. наше модифицированное декартово дерево так и останется декартовым деревом). Однако, с порядковыми номерами от этим подходом появляется две проблемы: наши операции добавления и удаления элемента могут поменять нумерацию, и при наивной реализации на изменение всех ключей потребуется <tex>lO(n)</tex> до времени, где <tex>rn</tex> и что{{---нибудь с ними сделать(вырезать, переставить, добавить ко всем числам на отрезке, развернуть, ...'''}} количество элементов в дереве.