Существует ли структура данных со следующими свойствами:
- Элементы хранятся в некотором порядке
- Доступ к элементу по заданному индексу занимает время 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). Материал, который я нашел в Интернете, как правило, близок, но не совсем там - сложная часть состоит в том, что удаляемые элементы могут быть из любого места в списке.