내 집 마련하기

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

요약
각 쿼리 구간 [L,R]에 대해 그 사람들이 이미 가진 집들을 다시 배정해 x*y 합이 최대가 되게 만든 뒤, 전체 수열을 출력한다.
난이도

보통10점 중 7점

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

문제

서강대학교에는 비어 있는 집이 NN채 있다. 그래서 서강대학교는 NN명의 사람들이 한 사람당 한 채의 집에 입주해 살 수 있도록 배정해 주려고 한다. 서강대학교에서는 입주한 사람들을 위해 특별한 혜택을 제공하는데, 바로 xx번 집에 yy번 사람이 입주해서 살게 되면 xyxy만큼의 세금을 감면해 준다는 것이다.

사람들이 집에 배정된 상태는 11부터 NN까지의 정수를 하나씩 원소로 가지는 수열 A_1,A_2,⋯ ,A_NA\_1,A\_2,\cdots,A\_N로 표현되는데, 이는 현재 ii번 집에 A_iA\_i번 사람이 배정되어 있음을 의미한다.

다음과 같은 쿼리를 해결하는 프로그램을 작성해 보자.

  • LL RR: 초기의 집 배정 상태에서, LL번부터 RR번까지의 사람들에게 이미 배정된 집들을 학교가 원하는 만큼 서로 교환해 재배정할 수 있을 때, 감면되는 세금의 합이 최대가 되도록 집에 사람들을 새롭게 배정하였을 때의 수열 AA를 출력한다.

모든 쿼리는 독립적이다. 즉, 쿼리가 실행된 직후 수열 AA는 초기 상태로 복구된다.

입력

첫째 줄에 수열의 길이를 나타내는 정수 NN이 주어진다. (1≤N≤300)(1\leq N \leq 300)

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

셋째 줄에 쿼리의 개수를 나타내는 정수 MM이 주어진다. (1≤M≤300)(1\leq M \leq 300)

넷째 줄부터 MM개의 줄에 걸쳐 쿼리를 나타내는 두 정수 L,RL,R이 공백으로 구분되어 주어진다. (1≤L≤R≤N)(1\leq L \leq R \leq N)

출력

쿼리마다 정답을 한 줄에 하나씩 출력한다.

각 줄에는 쿼리가 끝난 후 수열 A_1,A_2,⋯ ,A_NA\_1,A\_2,\cdots,A\_N을 공백으로 구분하여 출력한다.

가능한 답이 여러 가지라면, 아무거나 하나 출력한다.

예제1

  1. 예제 1

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