#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int M=1e6+20;
int a[M],b[M];
//consists of consecutive values in increasing order
//递增的值要是连续的 易得递推方程为 dp[a[i]]=max(dp[a[i],dp[a[i]-1]+1)
int d1[M],d2[M];//d[i] 表示为以a[i]结尾的连续valve的lIS
int ans[M];//以a[i]结尾的LCIS
int main()
{
int t;
cin>>t;
while(t--)
{
for(int i=0;i<M;i++)
{
d1[i]=0;
}
for(int i=0;i<M;i++)
{
d2[i]=0;
}
for(int i=0;i<M;i++)
{
ans[i]=0;
}
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
d1[a[i]]=max(d1[a[i]],d1[a[i]-1]+1);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&b[i]);
d2[b[i]]=max(d2[b[i]],d2[b[i]-1]+1);
}
int res=0;//a[i]中没有 b[i]中有的ans[b[i]] lCIS为0
for(int i=1;i<=n;i++)
{
ans[a[i]]=max(ans[a[i]],min(d1[a[i]],d2[a[i]]));
//两者的LCS由较小的d决定
res=max(res,ans[a[i]]);
}
cout<<res<<endl;
}
return 0;
}
hdu 5904 LCIS(简单dp)
最新推荐文章于 2021-11-27 15:29:07 发布