\begin{tutorial}{Очередь за кексами}

Давайте просто промоделируем все действия.

Заведем список элементов, а также сохраним по ключу $x$ указатель на элемент списка. Мы можем это сделать, так как все элементы различны. Например, в С++ можно просто завести коллекцию list<int>, а также map<int, list<int>::iterator> или реализовать свой список.

Теперь мы можем легко обрабатывать все запросы, а в конце просто выведем весь список.

Запрос 1-го типа можно обработать так: просто берем по ключу указатель на нужный элемент и вставляем перед ним другой элемент, останется только по ключу $x$ записать указатель на новый элемент.

Запрос 2-го типа~--- просто добавить в список элемент в конец и сохранить на него указатель.

Запрос 3-го типа~--- удаляем из списка элемент по его указателю.

В конце просто выводим массив.

Итоговая сложность $O(mlog(n))$

\end{tutorial}
