Дорогая часть удаления произвольного узла из кучи заключается не в удалении, а в нахождении узла для удаления. На самом деле удаление узла - это O (log n). Но сначала вы должны выполнить последовательное сканирование основного хранилища данных, чтобы найти узел. Это часть O (n).
Единственный способ ускорить это - сохранить вторую структуру данных, такую как словарь, хэш-карту или аналогичную, которая может быстро указать, где находится элемент в резервном хранилище. Затем у вас есть поиск O (1) в словаре, удаление O (1) из словаря и удаление O (log n) из кучи.