小小的瞎dp一下。
不过题目要求数据范围1e6,但是开1e6的数组会爆栈导致TLE,开1e5的数组就能过,数据太水而且题目没有出好,差评!
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100000+5;
int a[maxn];
int b[maxn];
int main()
{
int T;
scanf("%d", &T);
while (T--) {
int n, m;
scanf("%d%d", &n, &m);
int maxs = 0, maxt = 0;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
a[num] = a[num-1] + 1;
maxs = max(maxs, num);
}
for (int i = 0; i < m; i++) {
int num;
scanf("%d", &num);
b[num] = b[num-1] + 1;
maxt = max(maxt, num);
}
int ans = 0;
int lim = min(maxs, maxt);
for (int i = 0; i <= lim; i++) {
ans = max(ans, min(a[i], b[i]));
}
printf("%d\n", ans);
}
return 0;
}