Возможно регулярное удаление, как DeleteMin / Max. «Проблема» заключается в том, что вы должны проверить как на повышение, так и на понижение (т. Е. Когда «последний» узел занимает вакантное место, он может быть переоценен или недооценен. Поскольку для очевидного причины, это легко проверить на правильность.
Единственная проблема, которая остается, - это Находка. Ответ выше гласит, что вы можете найти элемент в O (LG N), но я не знаю, как. В моих реализациях я обычно строю кучу указателей на элементы, а не на элементы (более дешевое копирование при повышении / понижении). Я добавляю переменную "position" к типу Element, которая отслеживает индекс указателя элемента в куче. Таким образом, учитывая элемент E, я могу найти его положение в куче за постоянное время.
Очевидно, что это не вырезано для каждой реализации.