만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

정렬

면접 대비

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

요약
길이 N인 수열이 주어졌을 때, 블록 단위로 순서를 바꿔 정렬할 수 있는 블록의 최소 개수를 구합니다.
난이도

보통10점 중 6점

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

문제

수열 A1,A2,…,ANA_1, A_2, \dots, A_N이 모든 1≤i<N1 \le i < N에 대해 Ai≤Ai+1A_i \le A_{i+1}을 만족하면 이 수열을 정렬된 수열이라고 한다.

다음 방법으로 수열을 정렬하려고 한다. 먼저 수열을 MM개의 구간으로 나눈다. 수열의 처음 k1k_1개 원소가 첫 번째 구간을, 다음 k2k_2개 원소가 두 번째 구간을 이루며, 이런 식으로 마지막 kMk_M개 원소가 마지막 구간을 이룬다. 그다음 구간 전체를 서로 교환할 수 있지만, 구간 안에서는 원소의 순서를 바꿀 수 없다.

구간을 어떻게 나누느냐에 따라 구간 교환만으로 수열을 정렬할 수도 있고 없을 수도 있다. 예를 들어 수열 전체를 한 구간으로 두면, 처음부터 정렬되어 있던 수열만 정렬할 수 있다. 원소가 NN개인 수열은 NN개의 구간으로 나누면 항상 정렬할 수 있다.

구간 교환만으로 수열을 정렬할 수 있도록 하는 최소 구간 개수 MM을 구하라.

입력

첫 번째 줄에 수열의 원소 개수 NN(1≤N≤500 0001 \le N \le 500\,000)이 주어진다. 두 번째 줄에는 수열의 원소 A1,A2,…,ANA_1, A_2, \dots, A_N(1≤Ai≤N1 \le A_i \le N)이 공백으로 구분되어 주어진다.

출력

구간 교환으로 수열을 정렬할 수 있게 하는 최소 구간 개수 MM을 한 줄에 출력한다.

예제2

  1. 예제 1

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

    입력
    3
    1 2 1
    
    예상 출력
    2