Some checks failed
Build and Push Docker Images / build (src/LiquidCode.Tester.Gateway/Dockerfile, git.nullptr.top/liquidcode/liquidcode-tester-gateway-roman, gateway) (push) Successful in 1m12s
Build and Push Docker Images / build (src/LiquidCode.Tester.Worker/Dockerfile, git.nullptr.top/liquidcode/liquidcode-tester-worker-roman, worker) (push) Has been cancelled
20 lines
1.5 KiB
TeX
20 lines
1.5 KiB
TeX
\begin{tutorial}{Очередь за кексами}
|
||
|
||
Давайте просто промоделируем все действия.
|
||
|
||
Заведем список элементов, а также сохраним по ключу $x$ указатель на элемент списка. Мы можем это сделать, так как все элементы различны. Например, в С++ можно просто завести коллекцию list<int>, а также map<int, list<int>::iterator> или реализовать свой список.
|
||
|
||
Теперь мы можем легко обрабатывать все запросы, а в конце просто выведем весь список.
|
||
|
||
Запрос 1-го типа можно обработать так: просто берем по ключу указатель на нужный элемент и вставляем перед ним другой элемент, останется только по ключу $x$ записать указатель на новый элемент.
|
||
|
||
Запрос 2-го типа~--- просто добавить в список элемент в конец и сохранить на него указатель.
|
||
|
||
Запрос 3-го типа~--- удаляем из списка элемент по его указателю.
|
||
|
||
В конце просто выводим массив.
|
||
|
||
Итоговая сложность $O(mlog(n))$
|
||
|
||
\end{tutorial}
|