P7890简单排序 | ||
|
问题描述
你有一个别具一格的序列,其名为 \(a_1,a_2,\cdots,a_n\) ,皆为整数,互不相同。
你被分配了一个光鲜亮丽的任务,是将它排成升序。
你可以随心所欲地交换序列中任意的两个数,交换 \(a_i,a_j\) 的代价是 \(A\times |i-j|+B\) ,其中 \(A,B\) 是常数。
求随心所欲的最小代价,并给出一套行云流水的操作流程。
输入格式
第一行一个整数 \(n\) 。
第二行 \(n\) 个互不相同的整数 \(a_1,a_2,\cdots,a_n\) 。
第三行两个整数 \(A,B\) 。
输出格式
第一行一个整数表示最小代价。
第二行一个整数 \(k\) 表示操作次数。
接下来 \(k\) 行每行两个数 \(i,j\) 表示一次操作交换 \(a_i,a_j\) 。
- 你给出的操作流程结束时序列应当已经排成升序,且总代价为你计算的最小代价。
- 你给出的 \(k\) 不应超过 \(4\cdot 10^6\) ,否则会被直接视为操作流程错误。
- 如果你的最小代价计算错误,该测试点获得 $0$ 分。
- 如果你的最小代价计算正确,但操作流程错误,该测试点获得 \(20\%\) 的分数。
- 如果你的最小代价和操作流程均正确,该测试点获得满分。
提示
样例1
样例输入
4
42 35 13 21
1 1
样例输出
7
3
1 3
3 4
2 3
样例2
样例输入
6
6 5 4 3 2 1
5 3
样例输出
54
3
3 4
2 5
1 6
数据范围
对于10%的数据, \(n\leq 20\) , \(A=B=1\) ;
对于20%的数据, \(n\leq 200\) ;
对于40%的数据, \(n\leq 2000\) ;
对于70%的数据, \(n\leq 2\cdot 10^5\) , \(A=B=1\) ;
对于100%的数据, \(1\leq n\leq 2\cdot 10^5\) , \(1\leq a_i\leq 10^9\) , \(1\leq A,B\leq 10^3\) 。