아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Leave Out All The Rest

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

요약
서로 다른 값을 가진 두 배열을 하나로 교차 배치해 만든 수열의 최장 증가 부분 수열 길이를 최대로 만들고, 그 최댓값을 출력한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 정렬, 이분 탐색
정답자
아직 제출이 없습니다

문제

길이 nn인 정수 배열 aa와 길이 mm인 정수 배열 bb가 주어진다. 두 배열에 들어 있는 모든 정수는 서로 다르다.

두 배열의 인터리빙은 aa와 bb가 서로소인 부분수열로 들어 있는 크기 n+mn + m의 배열 cc이다. 정확히는 ci1=a1c_{i_1} = a_1, ci2=a2c_{i_2} = a_2, …\ldots, cin=anc_{i_n} = a_n인 인덱스 i1<i2<…<ini_1 < i_2 < \ldots < i_n과 cj1=b1c_{j_1} = b_1, cj2=b2c_{j_2} = b_2, …\ldots, cjm=bmc_{j_m} = b_m인 인덱스 j1<j2<…<jmj_1 < j_2 < \ldots < j_m이 존재한다. 이 인덱스들은 모든 x=1,2,…,nx = 1, 2, \ldots, n과 모든 y=1,2,…,my = 1, 2, \ldots, m에 대해 ix≠jyi_x \neq j_y를 만족한다.

배열 aa와 bb를 인터리빙하는 방법은 보통 여러 가지다. cc의 최장 증가 부분수열의 길이가 최대가 되는 인터리빙을 구하라.

입력

첫째 줄에 정수 nn (1≤n≤5⋅1051 \le n \le 5 \cdot 10^5)이 주어진다. 이는 배열 aa의 길이이다.

둘째 줄에 nn개의 정수 aia_i (1≤ai≤1091 \le a_i \le 10^9)가 주어진다.

셋째 줄에 정수 mm (1≤m≤5⋅1051 \le m \le 5 \cdot 10^5)이 주어진다. 이는 배열 bb의 길이이다.

넷째 줄에 mm개의 정수 bjb_j (1≤bj≤1091 \le b_j \le 10^9)가 주어진다.

두 배열의 수는 모두 서로 다르다. 즉 i≠ji \neq j이면 ai≠aja_i \neq a_j이고, i≠ji \neq j이면 bi≠bjb_i \neq b_j이며, 모든 올바른 ii와 jj에 대해 ai≠bja_i \neq b_j이다.

출력

aa와 bb를 인터리빙한 배열의 최장 증가 부분수열 길이의 최댓값을 정수 하나로 출력한다.

예제2

  1. 예제 1

    입력
    2
    1 7
    3
    6 10 11
    
    예상 출력
    5
    
  2. 예제 2

    입력
    3
    7 1 5
    3
    9 8 6
    
    예상 출력
    3