Permutation Swap

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

요약
순열이 주어질 때 위치 한 쌍을 최대 한 번 교환해 인접 증가 쌍의 개수를 최대로 만들고, 그 쌍이나 -1을 출력한다.
난이도

보통10점 중 7점

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

문제

길이가 NN인 순열 P_1,P_2,⋯ ,P_NP\_1, P\_2, \cdots, P\_N이 주어진다. 길이가 NN인 순열은 11 이상 NN 이하의 모든 정수를 정확히 한 번씩 포함하는 수열이다.

아래와 같은 연산을 최대 한 번 수행할 수 있다.

  • 1≤i<j≤N1 \leq i < j \leq N을 고른 뒤 P_i,P_jP\_i, P\_j의 위치를 서로 바꾼다.

연산을 수행한 뒤 얻은 순열 P_1′,P_2′,⋯ ,P_N′P\_1', P\_2', \cdots, P\_N'에서 1≤i<N1 \leq i < N이면서 P′_i<P′_i+1P'\_i < P'\_{i+1}인 인접한 증가 쌍 (P′_i,P′_i+1)(P'\_i, P'\_{i+1})의 개수를 최대화하고자 한다.

인접한 증가 쌍의 개수가 최대화되는 연산 방법을 구해보자.

입력

첫 번째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤100,000)(1 \le T \le 100\\,000)

테스트 케이스의 첫 번째 줄에는 순열의 길이를 나타내는 정수 NN이 주어진다. (2≤N≤200,000)(2 \leq N \leq 200\\,000)

테스트 케이스의 두 번째 줄에는 순열 P_1,P_2,⋯ ,P_NP\_1, P\_2, \cdots, P\_N이 공백으로 구분되어 주어진다. (1≤P_i≤N)(1 \leq P\_i \leq N)

모든 테스트 케이스에 대한 NN의 총합은 200,000200\\,000을 넘지 않는다.

출력

각 테스트 케이스에 대해, 인접한 증가 쌍의 개수가 최대화되는 연산 방법을 한 줄에 출력한다.

  • 연산을 수행하지 않는 것이 최적이라면 −1-1을 출력한다.
  • 연산을 수행한다면 선택한 두 위치 i,ji, j를 공백으로 구분하여 출력한다. (1≤i<j≤N)(1 \le i < j \le N)

가능한 정답이 여러 개라면, 그중 아무거나 하나 출력한다.

예제1

  1. 예제 1

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