BOI 2007 P2 - Sorting

View as PDF

Submit solution

Points: 40 (partial)
Time limit: 0.18s
Memory limit: 16M

Problem type
Allowed languages
Ada, Assembly, Awk, Brain****, C, C#, C++, COBOL, CommonLisp, D, Dart, F#, Forth, Fortran, Go, Groovy, Haskell, Intercal, Java, JS, Kotlin, Lisp, Lua, Nim, ObjC, OCaml, Octave, Pascal, Perl, PHP, Pike, Prolog, Python, Racket, Ruby, Rust, Scala, Scheme, Sed, Swift, TCL, Text, Turing, VB, Zig

You are given the scores of several players in a competition. Your task is to create a ranklist of the players, sorted in decreasing order by score.

Unfortunately, the data structure used for the list of players supports only one operation, which moves a player from position i to position j without changing the relative order of other players. If i > j, the positions of players at positions between j and i - 1 increase by 1, otherwise if i < j the positions of players at positions between i + 1 and j decrease by 1.

This operation takes i steps to locate the player to be moved, and j steps to locate the position where he or she is moved to, so the overall cost of moving a player from position i to position j is i + j. Here, positions are numbered starting with 1.

Determine a sequence of moves to create the ranklist such that the sum of the costs of the moves is minimized.

Input Specification

The first line contains n (2 \le n \le 1000), the number of players. Each of the following n lines contains one non-negative integer s_i (0 \le s_i \le
1,000,000), the scores of the players in the current order. You may assume that all scores are distinct.

Output Specification

In the first line of the output print the number of moves used to create the ranklist. The following lines should specify the moves in the order in which they are applied. Each move should be described by a line containing two integers i and j, which means that the player at position i is moved to position j. The numbers i and j must be separated by a single space.

Sample Input

5
20
30
5
15
10

Sample Output

2
2 1
3 5

Grading

30% of the test cases have values of n \le 10.


Comments

There are no comments at the moment.