Я пытаюсь создать дерево рангов на основе дерева AVL со специальными требованиями. Допустим, у меня есть дерево AVL с узлами, у каждого узла есть 2 поля:
id, priority
мое дерево AVL отсортированопо идентификатору, также у меня есть функция:
foo(currentId, delta)
, которая понижает приоритет всех идентификаторов, который меньше или равен currentId
на delta
эта функция должна работать со сложностью O (log n), поэтому мой вопрос в том, какую дополнительную информацию мне нужно сохранить, чтобы иметь возможность вытолкнуть узел с highest priority
на любом этапе with complexity O(1)
(после использования также foo!).
P.S.
Iпытался сохранить информацию о максимальном приоритете в правом поддереве, максимальном приоритете в левом поддереве, но после foo
требуется много изменений.Это займет больше, чем просто O (log n).Заранее благодарим за любые хорошие идеи или хорошие книги о деревьях.