luogu#P7650. [BalticOI 2007 Day 1] Ranklist Sorting

[BalticOI 2007 Day 1] 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

题目说明

来源于 Baltic Olympiad in Informatics 2007Day 1:sorting
由 @求学的企鹅 翻译整理。