E. 霸凌排序
每次测试的时间限制:10 秒
每次测试的内存限制:1024 兆字节
对于一个长度为 n 的排列 p,我们定义一次“霸凌交换”如下:
- 设 i 是满足 pi=i 的最大元素 pi 的索引。
- 设 j 是满足 i<j 的最小元素 pj 的索引。
- 交换 pi 和 pj。
定义 f(p) 为使 p 变为有序(即 pi=i)所需的霸凌交换次数。注意,如果 p 已经是恒等排列,则 f(p)=0。
给定 n 和一个长度为 n 的排列 p。你需要处理以下 q 个更新。
在每个更新中,你会得到两个整数 x 和 y。你需要交换 px 和 py,然后求出 f(p) 的值。
注意,更新是持久化的:对排列 p 的更改会影响后续更新。
输入
第一行包含两个整数 n 和 q(2≤n≤5⋅105,1≤q≤5⋅104)—— 排列的长度和更新的次数。
第二行包含 n 个整数 p1,p2,…,pn(1≤pi≤n)—— 排列 p。所有 pi 互不相同。
接下来的 q 行中,第 i 行包含两个整数 xi 和 yi(1≤xi<yi≤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 次霸凌交换如下:
[1,2,8,5,3,4,7,6],
[1,2,3,5,8,4,7,6],
[1,2,3,5,4,8,7,6],
[1,2,3,5,4,6,7,8],
[1,2,3,4,5,6,7,8]。