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

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

줄 세우기

시간 제한1초메모리 제한256 MB

요약
1부터 N까지의 순열이 주어질 때, 양 끝으로 보내는 조작을 최소로 사용해 오름차순으로 만드는 횟수를 구한다. 답은 N에서 연속한 값들이 이미 증가하는 순서로 놓인 가장 긴 구간의 길이를 뺀 값이다.
난이도

보통10점 중 6점

유형
배열, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

어린이 NN명이 놀이터에 한 줄로 서 있다. 각 어린이는 11부터 NN까지의 서로 다른 번호를 하나씩 달고 있다(즉, 번호들은 11부터 NN까지의 순열이다). 선생님은 다음 연산만을 사용해 어린이들을 번호가 작은 쪽부터 큰 쪽으로, 즉 1,2,…,N1, 2, \dots, N 순서가 되도록 세우려고 한다.

연산: 줄에 서 있는 어린이 중 한 명을 골라 줄의 맨 앞 또는 맨 뒤로 보낸다.

한 어린이가 빠져나가 빈자리가 생기면, 그 뒤에 있던 어린이들이 한 칸씩 앞으로 당겨 와서 빈자리를 메운다.

예를 들어 55명의 어린이가 다음 순서로 서 있다고 하자.

5 2 4 1 3

이때 다음과 같이 세 번의 연산으로 번호 순서대로 세울 수 있다.

  1. 11번 어린이를 맨 앞으로 보낸다. (5 2 4 1 3 → 1 5 2 4 3)
  2. 44번 어린이를 맨 뒤로 보낸다. (1 5 2 4 3 → 1 5 2 3 4)
  3. 55번 어린이를 맨 뒤로 보낸다. (1 5 2 3 4 → 1 2 3 4 5)

두 번 이하의 연산으로는 이 배열을 정렬할 수 없으므로, 이 경우 최소 이동 횟수는 33이다.

처음 줄 서 있는 상태가 주어질 때, 위 연산으로 번호 순서대로 세우기 위해 맨 앞이나 맨 뒤로 보내야 하는 어린이 수의 최솟값을 구하여라.

입력

입력은 두 줄로 이루어진다. 첫째 줄에는 어린이 수를 나타내는 정수 NN이 주어진다. 둘째 줄에는 처음에 줄 서 있는 어린이들의 번호가 서 있는 순서대로 공백 하나로 구분되어 주어진다. 1≤N≤1,000,0001 \le N \le 1{,}000{,}000이며, 주어지는 번호는 11부터 NN까지의 정수를 정확히 한 번씩 사용한 순열이다.

출력

번호 순서대로 세우기 위해 맨 앞이나 맨 뒤로 보내야 하는 어린이 수의 최솟값을 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    5
    5 2 4 1 3
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2
    1 2
    
    예상 출력
    0
    
  3. 예제 3

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