파일 업로드

🎨AI 리소스 생성

프롬프트 없음

순서 섞기

profile
실행 시간 제한메모리 제한
1 초512 MB
📃 해결할 문제

정수가 저장된 크기 NN인 배열 AA가 있을 때, "순서 섞기" 연산은 아래와 같이 정의된다.

  1. 크기가 NN인 배열 BB를 이용하여, 배열 AA의 좌측 끝 또는 우측 끝에 있는 값 중 하나를 차례로 꺼내어 배열 BB에 좌측부터 순서대로 저장한다. 아래의 그림에서 값이 꺼내지는 순서는 9, 34, 19, 12, 25, 4, 5, 36이다.
  2. 배열 BB를 배열 AA에 복사한다.

위에서 보인 그림처럼 순서 섞기 연산을 하면 배열 AA의 값은 다음과 같이 변경된다.

(34,19,5,36,4,25,12,9)(9,34,19,12,25,4,5,36)(34, 19, 5, 36, 4, 25, 12, 9) \Longrightarrow (9, 34, 19, 12, 25, 4, 5, 36)

배열 AAii번째 원소를 AiA_i라고 나타내자. "1i<jN1 \leq i \lt j \leq N이면 AiAjA_i ≤ A_j이다."가 성립할 때, "배열 AA는 단조증가한다"라고 말한다.

정수가 저장된 크기 NN인 배열 AA가 주어질 때, 배열 AA가 단조증가하도록 정렬하기 위해 필요한 "순서 섞기" 연산의 최소 횟수를 계산하는 프로그램을 작성하시오.

 

제한사항

  • 1N300,0001 \leq N \leq 300,000
  • 1Ai1091 \leq A_i \leq 10^9
💻 입력

첫 번째 줄에 정수 NN이 주어진다.

두 번째 줄에 배열 AA에 저장된 NN개의 정수 A1,,ANA_1, \dots, A_N이 공백을 사이에 두고 차례대로 주어진다.

🖨️ 출력

배열 AA가 단조증가하도록 정렬하기 위해 필요한 "순서 섞기" 연산의 최소 횟수를 출력한다.


💻 예제 입력 1
3
2 2 5
🖨️ 예제 출력 1
0
💻 예제 입력 2
5 3
4 2 1
5 3 1
5 4 2
4 5 2
3 8 3
🖨️ 예제 출력 2
5
💻 예제 입력 3
4 2
1 1 1
1 1 1
1 1 2
1 1 2
🖨️ 예제 출력 3
0

출처: KOI 2020 2차대회