Изменения
Rope
,Нет описания правки
'''Rope''' (рус. ''веревка'') {{---}} структура данных для хранения строки, представляющая из себя двоичное сбалансированное дерево и позволяющая делать операции вставки, удаления и конкатенации с логарифмической асимптотикой.
Заведем [[Дерево поиска, наивная реализация|двоичное дерево поиска]]. В каждом листе будем хранить последовательную часть строкии ее длину, а в промежуточных вершинах будем хранить сумму длин всех листьев в поддереве. Изначально дерево состоит из одной вершины {{---}} сама строка.В вершинах дерева будем хранить строку, если это лист, а также вес {{---}} суммарную длину всех строк в поддереве, или, если это лист, длину строки, которая в нем хранится.
==Merge==
===Псевдокод===
===Время работы===
===Псевдокод===
 '''char''' get('''int''' i,'''Node''' node):     '''if''' ('''not''' isNil(node)):
         '''if''' (node.left >= i):
             '''return''' get(i, node.left)
===Псевдокод===
     t1.w = i
     t2.w = node.w - i
===Псевдокод===
     (t1, t2) = split(node, beginIndex)
     t3 = split(t2, endIndex).second
===Псевдокод===
     (t1, t2) = split(node, insertIndex)
     t1 = merge(t1, t3)
     '''return''' merge(t1, t2)
