양손 정렬

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

요약
순열이 주어질 때 앞쪽 절반의 원소와 뒤쪽 절반의 원소를 한 번씩 맞바꿔 오름차순으로 만드는 최소 연산 횟수를 구하거나 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
그리디, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

11 이상 NN 이하의 모든 정수가 한 번씩 등장하는 수열 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 주어진다. 이 수열에 아래 연산을 00회 이상 적용해서 오름차순으로 만들려고 한다.

  • 수열의 앞쪽 ⌊N2⌋\left\lfloor \frac N2 \right\rfloor개의 원소 중 하나와 수열의 뒤쪽 ⌊N2⌋\left\lfloor \frac N2 \right\rfloor개의 원소 중 하나를 고른 뒤, 두 원소의 위치를 맞바꾼다.

수열을 오름차순으로 만드는 데 필요한 최소 연산 횟수를 구하자.

입력

첫째 줄에 수열의 길이 NN이 주어진다. (1≤N≤200,000)\left( 1\leq N\leq 200\\, 000 \right)

둘째 줄에 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤N)\left( 1\leq A\_i\leq N \right)

수열의 원소는 11부터 NN까지의 정수가 한 번씩만 등장한다.

출력

수열을 오름차순으로 정렬하는 데 드는 최소 연산 횟수를 출력한다. 오름차순으로 정렬할 수 없다면 −1-1을 출력한다.

힌트

⌊x⌋\lfloor x\rfloor는 xx의 소수점 이하를 버림한 값이다. 예를 들어, ⌊2.5⌋\lfloor 2.5\rfloor는 22이다.

예제5

  1. 예제 1

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

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

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

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

    입력
    11
    11 3 4 2 10 6 7 8 5 1 9
    
    예상 출력
    8