Codeforces Round 875 (Div. 1) |
---|
Закончено |
Для перестановки $$$p$$$ длины $$$n$$$ мы определяем хулиганский обмен следующим образом:
Мы определяем $$$f(p)$$$ как количество хулиганских обменов, которые нужно выполнить, пока $$$p$$$ не станет отсортированной. Обратите внимание, что если $$$p$$$ является тождественной перестановкой, то $$$f(p)=0$$$.
Вам даны $$$n$$$ и перестановка $$$p$$$ длины $$$n$$$. Вам нужно обработать следующие $$$q$$$ обновлений.
В каждом обновлении вам даются два целых числа $$$x$$$ и $$$y$$$. Нужно поменять местами $$$p_x$$$ и $$$p_y$$$ и затем найти значение $$$f(p)$$$.
Обратите внимание, что обновления сохраняются. Изменения, внесенные в перестановку $$$p$$$, будут применяться при обработке будущих обновлений.
Первая строка входных данных содержит два целых числа $$$n$$$ и $$$q$$$ ($$$2 \le n \le 5 \cdot 10^5$$$, $$$1 \le q \le 5 \cdot 10^4$$$) — длину перестановки и количество обновлений.
Вторая строка содержит $$$n$$$ целых $$$p_1,p_2,\ldots,p_n$$$ ($$$1 \leq p_i \leq n$$$) — перестановку $$$p$$$. Все элементы $$$p$$$ различны.
В $$$i$$$-й из следующих $$$q$$$ строк ввода содержатся два целых числа $$$x_i$$$ и $$$y_i$$$ ($$$1 \le x_i < y_i \le n$$$), описывающие $$$i$$$-е обновление.
После каждого обновления выведите $$$f(p)$$$.
8 5 6 2 1 5 3 4 7 8 1 8 2 3 4 7 7 8 3 6
5 6 9 8 7
После первого обновления мы имеем $$$f(p)=5$$$. $$$5$$$ хулиганских обменов изображены ниже:
Название |
---|