만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

타타라몬

면접 대비

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

요약
수열이 주어질 때 각 값을 최대 두 번까지 골라 합을 최대로 만들고, 합이 최대인 선택들 중 사전순으로 가장 작은 부분수열을 출력한다.
난이도

보통10점 중 6점

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

문제

제시와 제임스는 마을 곳곳에 사는 작은 생물인 타타라몬을 잡으러 나선다. 타타라몬을 잡으려면 먼저 싸운 다음 타타라볼에 넣어야 한다.

로켓에 실린 컴퓨터가 두 사람이 지나갈 길에서 만나게 될 타타라몬을 순서대로 예측했다. 타타라몬은 종류마다 고유한 번호가 있다. 예를 들어 25번 타타라몬의 이름은 판단카츄다.

두 사람은 욕심을 부리지 않기로 하고 같은 종류의 타타라몬을 최대 두 마리까지만 잡는다. 그러면서도 하루가 끝났을 때 잡은 타타라몬의 번호를 모두 더한 값은 가능한 한 크게 만들려고 한다.

만나는 순서대로 주어진 타타라몬의 번호 목록에서 같은 번호를 두 번까지만 고르면서 고른 번호의 합을 최대로 만들어야 한다. 잡은 타타라몬은 만난 순서를 그대로 유지하므로 답은 원래 수열의 부분 수열이다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 정수 NN이 주어진다. 둘째 줄에는 제시와 제임스가 만나는 순서대로 타타라몬의 번호 A1,A2,…,ANA_1, A_2, \dots, A_N이 공백 하나로 구분되어 주어진다.

  • 1≤T≤101 \le T \le 10
  • 1≤N≤1000001 \le N \le 100000
  • 1≤Ai≤1091 \le A_i \le 10^9

출력

각 테스트 케이스마다 잡아야 하는 타타라몬의 번호 B1,B2,…,BMB_1, B_2, \dots, B_M을 공백으로 구분해 한 줄에 출력한다. 번호는 입력에서 만난 순서를 그대로 따라야 하므로 B1,…,BMB_1, \dots, B_M은 A1,…,ANA_1, \dots, A_N의 부분 수열이다.

번호의 합이 최대인 부분 수열은 여러 개일 수 있다. 이때는 사전 순으로 가장 앞서는 것 하나만 출력한다. 합이 최대인 부분 수열은 길이가 모두 같으므로, 두 부분 수열을 앞에서부터 비교해 처음으로 값이 달라지는 자리에서 더 작은 값을 가진 쪽이 사전 순으로 앞선다.

예제2

  1. 예제 1

    입력
    2
    4
    60 52 60 60
    3
    9 17 1
    
    예상 출력
    52 60 60
    9 17 1
    
  2. 예제 2

    입력
    1
    6
    3 9 9 9 3 3
    
    예상 출력
    3 9 9 3