Очередь за кексами

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

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

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

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

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

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

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

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