C1077 [Contest #4]公共子序列

内存限制:256 MB 时间限制:2000 ms

题目描述

给出两个仅由 $1,2,3$ 这三种数字组成的序列 $a_1,a_2,\dots,a_n$ 和 $b_1,b_2,\dots,b_m$,找到一个他们的最长的公共子序列 $c_1,c_2,\dots,c_k$,使得 $c_1 \le c_2 \le \dots \le c_k$。

输入格式

输入有多组数据。第一行有一个整数$T$,表示测试数据组数。然后对于每组数据:

第一行包含两个正整数$n$和$m$ ($1 \le n, m \le 10^6$),表示两个序列的长度。

第二行包含$n$个整数 $a_1,a_2,\dots,a_n$ ($1 \le a_i \le 3$)。

第三行包含$m$个整数 $b_1,b_2,\dots,b_m$ ($1 \le b_i \le 3$)。

保证所有数据中 $\max\{n,m\}$ 的和不超过$10^6$。

输出

对于每组数据,输出一个整数代表最长公共非递减子序列的长度。

样例

样例输入 1

4 3 3 1 2 3 1 2 3 3 3 1 1 1 1 1 2 3 3 1 3 2 1 2 3 4 3 3 3 1 2 3 2 1

样例输出 1

3 2 2 1

提示

在第一组数据中,满足叙述里条件的最长的公共子序列是 $1, 2, 3$。

在第二组数据中,满足叙述里条件的最长的公共子序列是 $1, 1$。

在第三组数据中,满足叙述里条件的最长的公共子序列是 $1, 2$ 或 $1, 3$。

在第四组数据中,满足叙述里条件的最长的公共子序列是 $1$ 或 $2$ 或 $3$。