수열 정렬하기
Unrated
한국어
Language
Contribute a translation- Time limit
- 1000 ms
- Memory limit
- 1024 MB
- Submissions
- 0
- Correct
- 0
- Solved by
- 0
- AC rate
- —
Statement
길이가 $N$인 수열 $A = \left[ A_1, A_2, \cdots, A_N \right]$이 주어진다. 여러분은 다음과 같은 시행을 $0$번 이상 자유롭게 할 수 있다.
- 양의 정수 $x$를 정한다.
- 수열 $A$의 원소 중 값이 $x$ 이하인 원소들을 원래 순서대로 추출하여 부분 수열 $B$를 만든다.
- 수열 $A$의 원소 중 값이 $x$ 초과인 원소들을 원래 순서대로 추출하여 부분 수열 $C$를 만든다.
- 기존 수열 $A$를, $B$와 $C$를 순서대로 이어 붙인 수열($B + C$)로 대체한다.
수열 $A$를 비내림차순($A_1 \le A_2 \le \cdots \le A_N$)으로 정렬하기 위해서 최소 몇 번의 시행이 필요한지 계산하는 프로그램을 작성하라.
제약 조건을 만족하는 모든 입력에 대해, 주어진 시행을 통해 수열을 비내림차순으로 정렬하는 방법이 존재함을 증명할 수 있다.
Constraints
- 주어지는 모든 수는 정수이다.
- $1 \le N \le 300\,000$
- 정수 $i$ ($1 \le i \le N$)에 대하여 $1 \le A_i \le N$
Subtasks
- (6점) 정수 $i$ ($1 \le i \le N$)에 대하여 $A_i \le 2$
- (15점) $N \le 15$
- (23점) $N \le 100$
- (27점) $N \le 750$
- (33점) 정수 $i$, $j$ ($1 \le i < j \le N$)에 대하여 $A_i \neq A_j$
- (46점) 추가 제약 조건 없음.
Input
첫 줄에 정수 $N$이 주어진다.
그다음 줄에 $N$개의 정수 $A_1, A_2, \cdots, A_N$이 공백으로 구분되어 차례대로 주어진다.
Output
첫 줄에 수열 $A$를 비내림차순으로 정렬하기 위해 필요한 최소 시행 횟수를 출력한다.
Examples
Sample input 1
6 3 4 5 1 2 6
Sample output 1
1
다음과 같이 $1$번의 시행으로 수열 $A$를 비내림차순으로 정렬할 수 있다.
$x = 2$로 정하자.
값이 $x = 2$ 이하인 원소들을 원래 순서대로 추출하면 $B := [1, 2]$.
- 값이 $x = 2$ 초과인 원소들을 원래 순서대로 추출하면 $C := [3, 4, 5, 6]$.
- 따라서, 수열 $A$는 $B + C = [1, 2, 3, 4, 5, 6]$로 대체된다.
Sample input 2
9 1 5 9 9 5 1 1 5 9
Sample output 2
2
다음과 같이 $2$번의 시행으로 수열 $A$를 비내림차순으로 정렬할 수 있다.
$x = 3$으로 정하자.
값이 $x = 3$ 이하인 원소들을 원래 순서대로 추출하면 $B := [1, 1, 1]$.
- 값이 $x = 3$ 초과인 원소들을 원래 순서대로 추출하면 $C := [5, 9, 9, 5, 5, 9]$.
- 따라서, 수열 $A$는 $B + C = [1, 1, 1, 5, 9, 9, 5, 5, 9]$로 대체된다.
$x = 7$로 정하자.
값이 $x = 7$ 이하인 원소들을 원래 순서대로 추출하면 $B := [1, 1, 1, 5, 5, 5]$.
- 값이 $x = 7$ 초과인 원소들을 원래 순서대로 추출하면 $C := [9, 9, 9]$.
- 따라서, 수열 $A$는 $B + C = [1, 1, 1, 5, 5, 5, 9, 9, 9]$로 대체된다.
$2$번보다 적은 횟수의 시행으로는 수열 $A$를 비내림차순으로 정렬하는 것이 불가능함을 증명할 수 있다.
Tags
No tags yet