만드는 중입니다

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

복호화

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

요약
각 구간의 첫 원소가 그 구간의 최솟값이고 마지막 원소가 최댓값이 되도록 수열을 최소 개수의 겹치지 않는 구간으로 나눈다.
난이도

어려움10점 중 8점

유형
그리디, 스택, 배열, 누적 합
정답자
아직 제출이 없습니다

문제

어떤 단어의 첫 글자와 마지막 글자를 그대로 두고 나머지 글자를 임의로 재배열해도 그 글은 여전히 비교적 쉽게 읽힌다고 알려져 있다. 정보학 연구실에서는 수열에 대한 비슷한 현상을 연구한다.

양의 정수로 이루어진 수열이 올바른 수열이라는 것은 이 수열의 첫 번째 수가 최솟값이고 마지막 수가 최댓값인 경우를 말한다. 예를 들어 수열 [1,3,2,4][1, 3, 2, 4]와 [1,2,1,2][1, 2, 1, 2]는 올바른 수열이고, 수열 [1,3,2][1, 3, 2]는 아니다.

수열 [a1,a2,…,an][a_1, a_2, \ldots, a_n]이 주어진다. 주어진 수열의 연속한 원소들로 이루어진 구간 [al,al+1,…,ar][a_l, a_{l+1}, \ldots, a_r]이 올바른 구간이라는 것은 이 구간이 올바른 수열인 경우, 즉 ala_l이 이 구간의 최솟값이고 ara_r이 최댓값인 경우를 말한다.

연구의 일환으로 주어진 수열을 서로 겹치지 않는 올바른 구간들로 최소 개수로 나누려고 한다. 예를 들어 수열 [2,3,1,1,5,1][2, 3, 1, 1, 5, 1]은 세 개의 올바른 구간 [2,3][2, 3], [1,1,5][1, 1, 5], [1][1]로 나눌 수 있다.

주어진 수열을 최소 몇 개의 올바른 구간으로 나눌 수 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에는 주어진 수열의 원소 개수 nn이 주어진다 (1≤n≤300 0001 \le n \le 300\,000).

둘째 줄에는 주어진 수열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다 (1≤ai≤1091 \le a_i \le 10^9).

출력

주어진 수열을 나눌 수 있는 올바른 구간 개수의 최솟값을 출력한다.

예제3

  1. 예제 1

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

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

    입력
    6
    2 3 1 1 5 1
    
    예상 출력
    3