아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

회전

시간 제한8초메모리 제한1024 MB

요약
순열이 주어질 때, 임의의 연속 부분 수열을 왼쪽이나 오른쪽으로 한 칸 회전하는 연산을 그 길이만큼의 비용으로 수행해 오름차순으로 정렬하는 최소 비용을 구한다.
난이도

어려움10점 중 8점

유형
그리디, 배열, 수학, 정렬
정답자
아직 제출이 없습니다

문제

1 이상 NN 이하의 서로 다른 정수로 이루어진 길이 NN의 정수열 P=(p1,p2,…,pN)P = (p_1, p_2, \dots, p_N)이 있다. 이 정수열의 연속한 부분열을 골라 회전이라는 연산을 할 수 있다. 더 정확히는, 다음 두 종류의 연산을 임의의 순서로 임의 횟수만큼 할 수 있다.

  • 1≤b<e≤N1 \le b < e \le N을 만족하는 두 정수 bb, ee를 고른다. 연속 부분열 pb,…,pep_b, \dots, p_e의 맨 앞 원소를 그 연속 부분열의 맨 뒤로 옮긴다. 즉 pb,pb+1,pb+2,…,pe−2,pe−1,pep_b, p_{b+1}, p_{b+2}, \dots, p_{e-2}, p_{e-1}, p_e를 각각 pb+1,pb+2,pb+3,…,pe−1,pe,pbp_{b+1}, p_{b+2}, p_{b+3}, \dots, p_{e-1}, p_e, p_b로 바꾼다.
  • 1≤b<e≤N1 \le b < e \le N을 만족하는 두 정수 bb, ee를 고른다. 연속 부분열 pb,…,pep_b, \dots, p_e의 맨 뒤 원소를 그 연속 부분열의 맨 앞으로 옮긴다. 즉 pb,pb+1,pb+2,…,pe−2,pe−1,pep_b, p_{b+1}, p_{b+2}, \dots, p_{e-2}, p_{e-1}, p_e를 각각 pe,pb,pb+1,…,pe−3,pe−2,pe−1p_e, p_b, p_{b+1}, \dots, p_{e-3}, p_{e-2}, p_{e-1}로 바꾼다.

어느 연산이든 한 번에 고른 연속 부분열의 길이, 즉 e−b+1e-b+1만큼의 비용이 든다.

이 연산들을 사용해 정수열 PP의 원소를 오름차순으로 정렬하려고 한다. 즉 모든 1≤i≤N1 \le i \le N에 대해 pi=ip_i = i가 되게 하려고 한다. 이를 위해 필요한 비용의 합의 최솟값을 구하시오.

입력

입력은 50개 이하의 데이터 세트로 이루어진다. 각 데이터 세트는 다음 형식으로 주어진다.

N
p1 p2 … pN

첫째 줄에는 정수열의 길이 NN (2≤N≤1052 \le N \le 10^5)이 주어진다. 둘째 줄에는 정수열 PP의 각 원소 pip_i (1≤pi≤N1 \le p_i \le N)가 공백으로 구분되어 주어진다. i≠ji \ne j이면 pi≠pjp_i \ne p_j임이 보장된다.

입력의 끝은 0 하나로 이루어진 줄로 나타낸다.

출력

각 데이터 세트에 대해, 정수열 PP를 오름차순으로 정렬하는 데 필요한 비용의 합의 최솟값을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3
    2 3 1
    5
    1 2 3 4 5
    8
    1 2 4 5 3 7 6 8
    0
    
    예상 출력
    3
    0
    5