Erdős-Szekeres (Large)

시간 제한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)의 증가 부분수열이다.

폴 에르되시와 조지 세케레시는 약 80년 전에 이런 결과를 증명했다. 길이가 NN인 어떤 XX에도 길이가 N\sqrt{N} 이상인 증가 부분수열이나 길이가 N\sqrt{N} 이상인 감소 부분수열이 반드시 있다. 예를 들어 (4,5,3,7,6,2,8,1)(4, 5, 3, 7, 6, 2, 8, 1)에는 길이가 4인 감소 부분수열 (5,3,2,1)(5, 3, 2, 1)이 있다.

조합론 수업에서 이 정리를 예로 설명하려고 각 ii마다 두 값을 계산했다.

  • A[i]A[i]: X[i]X[i]를 가장 큰 원소로 하는 가장 긴 증가 부분수열의 길이, 즉 X[i]X[i]에서 끝나는 증가 부분수열의 최대 길이.
  • B[i]B[i]: X[i]X[i]를 가장 큰 원소로 하는 가장 긴 감소 부분수열의 길이, 즉 X[i]X[i]에서 시작하는 감소 부분수열의 최대 길이.

증명의 핵심은 쌍 (A[i],B[i])(A[i], B[i])가 모든 ii에서 서로 다르다는 점이고, 여기서 어떤 ii의 A[i]A[i]나 B[i]B[i]가 N\sqrt{N} 이상이라는 결론이 나온다. 위 수열의 두 값은 다음과 같다.

iiX[i]X[i]A[i]A[i]B[i]B[i]
0414
1524
2313
3734
4633
5212
6842
7111

그런데 AA와 BB만 남고 원래 수열 XX는 잊어버렸다. A[i]A[i]와 B[i]B[i]가 주어질 때 XX를 복원하라.

XX는 11부터 NN까지의 수를 어떤 순서로 나열한 수열이다. 조건을 만족하는 XX가 여러 개면 사전순으로 가장 작은 것을 출력한다. 사전순으로 가장 작다는 것은 X[0]X[0]이 가능한 한 작고, 그래도 여러 개가 남으면 X[1]X[1]이 가능한 한 작고, 이런 식으로 계속 이어진다는 뜻이다.

입력

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

각 테스트 케이스의 첫 줄에 정수 NN이 주어진다. 둘째 줄에는 A[0],A[1],…,A[N−1]A[0], A[1], \dots, A[N-1]이 공백으로 구분된 양의 정수 NN개로 주어진다. 셋째 줄에는 B[0],B[1],…,B[N−1]B[0], B[1], \dots, B[N-1]이 같은 형식으로 주어진다.

제한

  • 1≤T≤301 \le T \le 30
  • 1≤N≤20001 \le N \le 2000
  • 각 테스트 케이스에는 조건을 만족하는 XX가 적어도 하나 있다.

출력

각 테스트 케이스마다 한 줄에 Case #x: 를 출력한 뒤 X[0],X[1],…,X[N−1]X[0], X[1], \dots, X[N-1]을 순서대로 공백으로 구분해 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다.

예제3

  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
    
  2. 예제 2

    입력
    3
    1
    1
    1
    2
    1 2
    1 1
    2
    1 1
    2 1
    
    예상 출력
    Case #1: 1
    Case #2: 1 2
    Case #3: 2 1
    
  3. 예제 3

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