리버스 정렬

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

요약
부분 배열을 뒤집는 연산의 비용이 (길이-1) mod 2일 때, 순열을 최소 비용으로 오름차순 정렬하는 연산序列을 출력한다.
난이도

보통10점 중 6점

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

문제

길이 NN의 순열 PP가 있다. 당신은 한 연산에서 다음과 같은 연산을 최대 10,00010\\,000회 할 수 있다.

  • 1≤l≤r≤N1 \leq l \leq r \leq N인 ll과 rr을 고른다. 그 후 PP에서 ll부터 rr까지의 부분 수열의 순서를 반대로 뒤집는다. 이 연산의 비용은 (r−l)mod⁡2(r-l) \operatorname{mod} 2 이다.

예를 들어 \[2,1,4,3,5]\[2,1,4,3,5]에서 l=2,r=4l=2, r=4인 연산을 사용한다면, \[2,3‾,4‾,1‾,5]\[2,\underline{3},\underline{4},\underline{1},5]가 된다.

연산을 최대 10,00010\\,000번만 하여 순열 PP를 오름차순으로 정렬하는 방법을 구해보자. 가능한 방법이 여러 가지라면, 사용한 연산의 비용의 합이 최소인 방법을 구해보자.

입력

첫째 줄에 NN이 주어진다. (1≤N≤5,000)(1 \leq N \leq 5\\,000)

둘째 줄에 P_1,P_2,⋯ ,P_NP\_1, P\_2, \cdots, P\_N가 공백으로 구분되어 주어진다.

출력

첫째 줄에 연산의 횟수 QQ를 출력한다. (0≤Q≤10,000)(0 \leq Q \leq 10\\,000)

다음 QQ개의 줄에 ii번째 연산 l_il\_i와 r_ir\_i를 공백으로 구분하여 출력한다. (1≤l_i≤r_i≤N)(1 \leq l\_i \leq r\_i \leq N)

순열 PP를 최소한의 비용으로 정렬할 수 있는 방법이 여러 가지라면, 아무 방법이나 출력한다.

힌트

길이 NN의 순열은 11부터 NN까지의 수가 정확히 한 번 등장하는 수열을 말한다.

예를 들어, \[3,5,1,2,4]\[3,5,1,2,4]와 \[1,3,2]\[1,3,2]는 순열이지만, \[2,3,2]\[2,3,2]또는 \[0]\[0]은 순열이 아니다.

두 정수 aa와 bb에 대해 amod⁡ba \operatorname{mod} b는 aa를 bb로 나눈 나머지를 의미한다.

연산을 10,00010\\,000번 이하로 하여 주어진 순열을 항상 정렬할 수 있음을 보일 수 있다.

예제3

  1. 예제 1

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

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

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