問題
참고: "Reversort"와 "Reversort Engineering" 문제의 설명은 마지막 문단을 제외하면 주요 부분이 동일하다. 그 외에는 두 문제를 서로 독립적으로 풀 수 있다.
Reversort는 서로 다른 정수로 이루어진 리스트를 오름차순으로 정렬하는 알고리즘이다. 이 알고리즘은 "Reverse" 연산을 기반으로 한다. 이 연산을 한 번 적용하면 리스트의 어떤 연속 구간(contiguous part)의 순서를 뒤집는다.
알고리즘의 의사코드는 다음과 같다:
Reversort(L):
for i := 1 to length(L) - 1
j := position with the minimum value in L between i and length(L), inclusive
Reverse(L[i..j])
예를 들어 원소가
i = 1,~ j = 3 \longrightarrow L = [1, 2, 4, 3] i = 2,~ j = 2 \longrightarrow L = [1, 2, 4, 3] i = 3,~ j = 4 \longrightarrow L = [1, 2, 3, 4]
우리의 아키텍처에서 알고리즘을 실행할 때 가장 비용이 큰 부분은 Reverse 연산이다.
따라서 각 반복의 비용은 Reverse에 넘기는 부분 리스트의 길이,
즉
위 예시에서 각 반복의 비용은 순서대로
초기 리스트가 주어졌을 때, 그 리스트에 Reversort를 적용하는 데 드는 비용을 구하라.
入力
입력의 첫 줄에는 테스트 케이스 수
出力
각 테스트 케이스마다 Case # 형식의 한 줄을 출력하라.
여기서
例題
3
4
4 2 1 3
2
1 2
7
7 6 5 4 3 2 1
Case #1: 6
Case #2: 1
Case #3: 12