Существует ли структура данных со следующими свойствами:
- Элементы хранятся в некотором порядке
- Доступ к элементу по заданному индексу занимает время O (1) (возможно, амортизированное)
- Удаление элемента требует амортизации O (1) времени и соответствующим образом изменяет индексы (поэтому, если элемент 0 удаляется, следующий доступ к элементу 0 должен возвращать старый элемент 1)
В контексте я уменьшил вопрос алгоритма от соревнований по программированию до:
В запросах m
верните k
th наименьшее положительное число, которое еще не было возвращено. Вы можете предположить, что возвращаемое число меньше некоторой константы n
.
Если структура данных выше существует, вы можете сделать это в O(m)
раз, создав список чисел от 1 до n
. Затем для каждого запроса найдите элемент с индексом k
и удалите его. Во время самого конкурса мое решение оказалось O(m^2)
на определенных входах.
Я уверен, что вы можете сделать это в O(m log m)
с бинарными деревьями поиска, но мне интересно, доступен ли идеальный O(m)
. Материал, который я нашел в Интернете, как правило, близок, но не совсем там - сложная часть состоит в том, что удаляемые элементы могут быть из любого места в списке.