Здравствуйте.
Поскажите, пожалуйста, как при помощи красно-чёрных деревьев (+ к каждой вершине хранить длину дерева, в котором эта вершина корень, ясно, что это и так восстанавливается, но для быстродейтвия, т.к. в процессе построения за этим добром уследить несложно) посчитать количество инверсий во входном массиве (из которого и было сделано это дерево) за время
. Задача из книги Кормен "Алгоритмы, построение и анализ".
Я так понимаю, считается, что дерево уже построено. Доступ к первоначальному массиву закрыт. Но только мне кажется, что тогда массив неоднозначно восстанавливается (отсюда не следует, конечно, что кол-во инверсий тоже неоднозначно восстанавливается).
По крайней мере в обычном дереве поиска он восстанавливается неоднозначно. (Пример: Вставить: 1, 2, 3, 5, 4, 9 и Вставить: 1, 2, 3, 5, 9, 4 получаются одинаковые деревья, а даже и кол-во инверсий в исходных массивах разные)
И тогда второй вопрос: можно ли в RB tree однозначно восстановить изначальный массив? Если нет, то, может, можно добавить какое-то дополнительное поле каждому элементу, и тогда можно будет?
Спасибо.