bzoj#P1341. [Baltic2007] 名次排序问题 Ranklist sorting

[Baltic2007] 名次排序问题 Ranklist sorting

题目描述

在一场比赛中,你会得到几名选手的分数。你的任务是创建一个按分数递减排序的选手的排名表。

不幸的是,用于选手排名表的数据结构仅支持一种操作,即在不改变其他玩家的相对顺序的情况下将玩家从位置 ii 移动到位置 jj。如果 i>ji > j,则 jji1i-1 之间位置的玩家位置增加 11,否则如果 i<ji < j,则 i+1i+1jj 之间位置的玩家位置减少 11

这个操作需要 ii 步来定位要移动的玩家,jj 步来定位他或她移动到的位置,所以将一个玩家从位置 ii 移动到位置 jj 的总成本是 i+ji+j。规定,位置从 11 开始编号。

确定一个步法序列来创建排名表,使步法的代价之和最小化。

输入格式

第一行包含整数 nn,即玩家数量。

接下来的 nn 行中的每一行都包含一个非负整数 sis_i,即当前顺序中玩家的分数。您可以假设所有分数都是不同的。

输出格式

第一行输出用于创建排名表的移动次数。以下几行应按应用顺序指定移动,每次移动都应该用一行包含两个整数 iijj 来描述,表示位置 ii 的玩家被移动到位置 jj。数字 iijj 必须用一个空格分隔。

5
20
30
5
15
10
2
2 1
3 5

数据范围

对于 30%30\% 的数据,n10n\le 100si1060\le s_i\le 10^6

对于 100%100\% 的数据,2n1032\le n\le 10^30si1060\le s_i\le 10^6