아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

3초 정렬

면접 대비

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

요약
정렬되지 않은 수열이 주어질 때 원소를 3번 이하로 교체해 비내림차순으로 만들 수 있는지 판정하고, 그런 교체 방법 하나를 출력한다.
난이도

보통10점 중 7점

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

문제

지금 여러분이 평화롭게 문제를 보고 있는 사이, 이미 강당 밖에는 극단 원리주의 민초파 테러리스트 김준원이 학교를 점령했다.

입력받은 수열을 3초 안에 오름차순으로 정렬된 상태로 만들지 않으면 강당에 설치해놓은 민초 폭탄이 터진다.

당신은 수열의 어떤 원소 AiA_i를 다른 수 XX로 바꿀 수 있다.

이 연산에는 1초가 걸린다.

3...

2...

1...

입력

첫째 줄에 당신이 정렬된 상태로 만들어야 하는 수열의 길이 NN이 주어진다.

둘째 줄에 수열의 원소들을 나타내는 NN개의 정수 A1,A2,⋯ ,ANA_1, A_2, \cdots , A_N이 공백으로 구분되어 주어진다.

출력

3번의 연산 안에 수열을 오름차순으로 정렬된 상태로 만들 수 있으면,

  • 첫째 줄에 YES를 출력한다.

  • 둘째 줄부터, 수열을 정렬된 상태로 만들 수 있는 방법을 다음과 같은 형태로 출력한다.

    • 첫째 줄에, 연산 횟수 KK를 출력한다.
    • 이후, KK개의 줄에 걸쳐, 적용할 연산을 순서대로 출력한다.
      구체적으로, 각 줄에 두 정수 ii와 XX를 출력한다. 이는, 원소 AiA_i를 XX로 바꾸는 연산을 의미한다. (1≤i≤N1 \le i \le N, 1≤X≤1 000 000 0001 \leq X \leq 1\,000\,000\,000)

연산의 횟수를 최소화할 필요가 없으며, 가능한 방법이 여럿 있으면 아무 방법이나 하나 출력해도 괜찮다. 같은 원소를 여러 번 수정해도 된다.

3번의 연산 안에 수열을 오름차순으로 정렬된 상태로 만들 수 없으면,

  • 첫째 줄에 NO를 출력한다.

제한

  • 1≤N≤200 0001 \leq N \leq 200\,000
  • 1≤Ai≤1 000 000 0001 \leq A_i \leq 1\,000\,000\,000 (1≤i≤N1 \le i \le N)
  • 이미 오름차순으로 정렬된 수열은 주어지지 않는다.

힌트

수열 A1,⋯ ,ANA_1, \cdots, A_N이 오름차순으로 정렬되어 있다는 것은, A1≤A2A_1 \le A_2, A2≤A3A_2 \le A_3, ⋯\cdots, AN−1≤ANA_{N-1} \le A_N이라는 뜻이다.

예제3

  1. 예제 1

    입력
    5
    6 7 10 8 20
    
    예상 출력
    YES
    1
    4 15
    
  2. 예제 2

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

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