H. 并行交换排序
每次测试时间限制:7 秒
内存限制:1024 MB
你有一个排列 p1,p2,…,pn,它是 [1,2,…,n] 的一个排列。你可以进行若干次(可能为零次)如下操作:
- 选择一个长度为偶数的子数组 [l,r];
- 交换 al 与 al+1;
- 交换 al+2 与 al+3(如果 l+3≤r);
- …
- 交换 ar−1 与 ar。
请在最多 106 次操作内将排列排序。你不需要最小化操作次数。
输入
第一行包含一个整数 n(2≤n≤3⋅105)——排列的长度。
第二行包含 n 个整数 p1,p2,…,pn(1≤pi≤n,所有 pi 互不相同)——初始排列。
输出
按以下格式输出你的操作。
第一行包含一个整数 k(0≤k≤106)——操作次数。
接下来的 k 行依次描述每个操作。每行包含两个整数 l 和 r(1≤l<r≤n,且 r−l+1 必须是偶数)——表示这次操作选择子数组 [l,r],并按照题目描述交换其中的元素。
所有操作结束后,必须对每个 i(1≤i≤n)满足 ai=i。
示例
输入
5
2 5 4 1 3
输出
5
1 4
1 2
2 5
1 4
4 5
输入
9
1 2 3 4 5 6 7 8 9
输出
0
输入
10
6 4 2 3 8 10 9 1 5 7
输出
15
1 8
6 9
1 8
3 10
1 10
1 10
1 6
6 9
6 9
2 7
9 10
5 10
1 6
2 9
1 10
说明
在第一个样例中:
- 初始:p=[2,5,4,1,3]。
- 第一次操作选择 [l,r]=[1,4],交换 (a1,a2) 和 (a3,a4),得到 [5,2,1,4,3]。
- 第二次操作选择 [l,r]=[1,2],交换 (a1,a2),得到 [2,5,1,4,3]。
- 第三次操作选择 [l,r]=[2,5],交换 (a2,a3) 和 (a4,a5),得到 [2,1,5,3,4]。
- 第四次操作选择 [l,r]=[1,4],交换 (a1,a2) 和 (a3,a4),得到 [1,2,3,5,4]。
- 第五次操作选择 [l,r]=[4,5],交换 (a4,a5),得到 [1,2,3,4,5],已排序。
在第二个样例中,排列已经有序,因此不需要任何操作。