스왑 스왑

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

요약
인접한 두 위치를 바꾼 뒤 두 칸 떨어진 위치를 바꾸는 연산을 반복해 순열을 오름차순으로 만들 수 있는지 판별한다.
난이도

보통10점 중 6점

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

문제

길이 NN인 순열(1부터 NN까지의 모든 정수가 정확히 한 번씩 등장하는 수열) a_1,a_2,…,a_Na\_1, a\_2, \dots, a\_N이 주어진다. 다음 연산을 원하는 만큼(0회 이상) 적용하여 수열을 오름차순으로 만들 수 있는지 판별하라.

한 번의 연산은 아래 두 동작을 이 순서로 "모두" 수행하는 것이다.

  1. 임의의 ii를 골라 위치 ii와 i+1i+1의 원소를 교환한다. (1≤i≤N−1)(1 \le i \le N-1)
  2. 임의의 jj를 골라 위치 jj와 j+2j+2의 원소를 교환한다. (1≤j≤N−2)(1 \le j \le N-2)

각 연산마다 ii와 jj는 자유롭게 선택할 수 있으며, i=ji=j를 선택하는 것도 허용된다.

연산을 통해 수열을 오름차순으로 만들 수 있다면 Yes를 출력하고, 그렇지 못한다면 No를 출력하라.

입력

첫째 줄에 정수 N(3≤N≤2,000)N(3 \le N \le 2,000)이 주어진다.

둘째 줄에 순열 a_1,a_2,…,a_Na\_1, a\_2, \dots, a\_N이 주어진다.

수열은 1부터 N까지의 숫자가 정확히 1번 등장한다.

출력

주어진 순열을 위의 연산들로 오름차순으로 만들 수 있으면 Yes, 그렇지 않으면 No를 출력한다.

예제3

  1. 예제 1

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

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

    입력
    3
    2 1 3
    
    예상 출력
    No