에르되시와 세케레시 수열 복원
시간 제한5초메모리 제한512 MB
각 위치의 증가 부분 수열 길이와 감소 부분 수열 길이가 주어지면 이를 만족하는 1부터 N까지 순열 중 사전 순으로 가장 작은 순열을 복원합니다.
문제
는 부터 까지의 수를 한 번씩 나열한 수열이다. 에서 앞뒤 순서를 지키며 몇 개를 골랐을 때 값이 계속 커지면 증가 부분수열, 계속 작아지면 감소 부분수열이라고 한다. 예를 들어 은 의 증가 부분수열이다.
폴 에르되시와 세케레시 죄르지는 길이가 이상인 증가 부분수열과 길이가 이상인 감소 부분수열 중 적어도 하나가 에 반드시 있다는 것을 증명했다. 위 수열에는 길이가 4인 감소 부분수열 이 있다.
각 마다 두 값을 정의한다.
- 는 가 가장 큰 수인 증가 부분수열의 최대 길이다.
- 는 가 가장 큰 수인 감소 부분수열의 최대 길이다.
증가 부분수열에서 가장 큰 수는 마지막 원소이므로 는 에서 끝나는 증가 부분수열의 최대 길이와 같다. 감소 부분수열에서 가장 큰 수는 첫 원소이므로 는 에서 시작하는 감소 부분수열의 최대 길이와 같다.
의 값은 다음과 같다.
순서쌍 는 모든 에서 서로 다르고, 여기서 어떤 의 나 가 이상이라는 결론이 나온다.
와 가 주어질 때 를 복원하라. 는 부터 까지의 수를 한 번씩 쓴 수열이어야 하고, 가능한 가 여럿이면 사전순으로 가장 앞서는 것을 출력한다. 즉 을 가능한 한 작게 하고, 그래도 여러 개가 남으면 을 가능한 한 작게 하는 식으로 정한다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다. 각 테스트 케이스는 세 줄로 이루어진다.
첫 줄에 정수 이 주어진다. 둘째 줄에 이 공백으로 구분되어 주어진다. 셋째 줄에 이 공백으로 구분되어 주어진다.
제한
- 와 는 양의 정수이다.
- 조건을 만족하는 가 적어도 하나 존재한다.
출력
각 테스트 케이스마다 한 줄에 Case #x: 를 출력하고, 이어서 을 공백으로 구분해 출력한다. 는 1부터 시작하는 테스트 케이스 번호다.