만드는 중입니다

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

에르되시와 세케레시 수열 복원

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

요약
각 위치의 증가 부분 수열 길이와 감소 부분 수열 길이가 주어지면 이를 만족하는 1부터 N까지 순열 중 사전 순으로 가장 작은 순열을 복원합니다.
난이도

보통10점 중 7점

유형
백트래킹, 그리디, 동적 계획법
정답자
아직 제출이 없습니다

문제

XX는 11부터 NN까지의 수를 한 번씩 나열한 수열이다. XX에서 앞뒤 순서를 지키며 몇 개를 골랐을 때 값이 계속 커지면 증가 부분수열, 계속 작아지면 감소 부분수열이라고 한다. 예를 들어 (5,7,8)(5, 7, 8)은 (4,5,3,7,6,2,8,1)(4, 5, 3, 7, 6, 2, 8, 1)의 증가 부분수열이다.

폴 에르되시와 세케레시 죄르지는 길이가 N\sqrt{N} 이상인 증가 부분수열과 길이가 N\sqrt{N} 이상인 감소 부분수열 중 적어도 하나가 XX에 반드시 있다는 것을 증명했다. 위 수열에는 길이가 4인 감소 부분수열 (5,3,2,1)(5, 3, 2, 1)이 있다.

각 ii마다 두 값을 정의한다.

  • AiA_i는 XiX_i가 가장 큰 수인 증가 부분수열의 최대 길이다.
  • BiB_i는 XiX_i가 가장 큰 수인 감소 부분수열의 최대 길이다.

증가 부분수열에서 가장 큰 수는 마지막 원소이므로 AiA_i는 XiX_i에서 끝나는 증가 부분수열의 최대 길이와 같다. 감소 부분수열에서 가장 큰 수는 첫 원소이므로 BiB_i는 XiX_i에서 시작하는 감소 부분수열의 최대 길이와 같다.

X=(4,5,3,7,6,2,8,1)X = (4, 5, 3, 7, 6, 2, 8, 1)의 값은 다음과 같다.

iiXiX_iAiA_iBiB_i
0414
1524
2313
3734
4633
5212
6842
7111

순서쌍 (Ai,Bi)(A_i, B_i)는 모든 ii에서 서로 다르고, 여기서 어떤 ii의 AiA_i나 BiB_i가 N\sqrt{N} 이상이라는 결론이 나온다.

AA와 BB가 주어질 때 XX를 복원하라. XX는 11부터 NN까지의 수를 한 번씩 쓴 수열이어야 하고, 가능한 XX가 여럿이면 사전순으로 가장 앞서는 것을 출력한다. 즉 X0X_0을 가능한 한 작게 하고, 그래도 여러 개가 남으면 X1X_1을 가능한 한 작게 하는 식으로 정한다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 세 줄로 이루어진다.

첫 줄에 정수 NN이 주어진다. 둘째 줄에 A0,A1,…,AN−1A_0, A_1, \ldots, A_{N-1}이 공백으로 구분되어 주어진다. 셋째 줄에 B0,B1,…,BN−1B_0, B_1, \ldots, B_{N-1}이 공백으로 구분되어 주어진다.

제한

  • 1≤T≤301 \le T \le 30
  • 1≤N≤201 \le N \le 20
  • AiA_i와 BiB_i는 양의 정수이다.
  • 조건을 만족하는 XX가 적어도 하나 존재한다.

출력

각 테스트 케이스마다 한 줄에 Case #x: 를 출력하고, 이어서 X0,X1,…,XN−1X_0, X_1, \ldots, X_{N-1}을 공백으로 구분해 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다.

예제1

  1. 예제 1

    입력
    2
    1
    1
    1
    8
    1 2 1 3 3 1 4 1
    4 4 3 4 3 2 2 1
    
    
    예상 출력
    Case #1: 1
    Case #2: 4 5 3 7 6 2 8 1