Изменения
Нет описания правки
if y == NULL return x
if y.key < x.key :
x<-> y //Воспользуемся тем, что куча левосторонняя. Правая ветка — самая короткая и не длиннее //логарифма. Пойдем направо и сольем правое поддерево с у. x.R<-merge(x.R, y) //Могло возникнуть нарушение левостороннести кучи. If dist(x.R) > dist(x.L): x.L<->x.R update dist(x) //dist(x) = min(dist(x.L), dist(x.R)) + 1 return x; //Каждый раз идет в уже существующей вершине только в правое поддерево — не более логарифма вызовов (по лемме).
===insert===
Вставка новой вершины в дерево. Новое левостороннее дерево, состоящее из одной вершины, сливается с исходным.