오르막길과 내리막길

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

요약
인접 카드 교환으로 배열을 오른뒤 내림차 순서의 비토닉 배열로 만들 때 필요한 교환 횟수의 최솟값을 구합니다.
난이도

어려움10점 중 8점

유형
분할 정복, 정렬, 그리디, 비트 연산
정답자
아직 제출이 없습니다

문제

숫자가 적힌 카드 여러 장이 탁자 위에 나란히 놓여 있다.

카드의 순서를 바꿔서 앞부분은 적힌 수가 감소하지 않도록, 나머지 부분은 증가하지 않도록 만들려고 한다. 예를 들어 (1, 2, 3, 2, 1), (1, 1, 3, 4, 5, 9, 2), (5, 3, 1)은 가능한 순서지만 (8, 7, 9)와 (5, 3, 5, 3)은 불가능하다.

형식적으로, 카드의 수를 nn, 순서를 바꾼 후 ii번째 위치(1≤i≤n1 \le i \le n)에 놓인 카드에 적힌 수를 bib_i라 하자. 이때 (bi≤bi+1 ∀i∈{1,…,k−1})(b_i \le b_{i+1}\ \forall i \in \{1, \ldots, k-1\})이고 (bi≥bi+1 ∀i∈{k,…,n−1})(b_i \ge b_{i+1}\ \forall i \in \{k, \ldots, n-1\})인 k∈{1,…,n}k \in \{1, \ldots, n\}가 존재해야 한다.

순서를 바꿀 때 허용되는 연산은 인접한 두 카드의 위치를 맞바꾸는 것뿐이다. 주어진 순서를 완성하는 데 필요한 최소 교환 횟수를 구하자.

입력

입력은 다음과 같은 형식의 테스트 케이스 하나로 이루어진다.

n
a1 . . . an

첫 줄의 정수 nn은 카드의 수이다(1≤n≤100 0001 \le n \le 100\ 000). 둘째 줄의 정수 a1a_1부터 ana_n은 원래 위치 순서대로 카드에 적힌 수이다(1≤ai≤100 0001 \le a_i \le 100\ 000).

출력

카드를 지정된 순서로 바꾸는 데 필요한 최소 교환 횟수를 한 줄에 출력한다.

예제4

  1. 예제 1

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

    입력
    9
    10 4 6 3 15 9 1 1 12
    
    예상 출력
    8
    
  3. 예제 3

    입력
    8
    9 9 8 8 7 7 6 6
    
    예상 출력
    0
    
  4. 예제 4

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