这题主要是lcs转换为lis的巧妙之处
3←1,2←2,1←3,4←4,5←5对应转换后
变成
12345
32145
那就转换成求最长不降子序列序
int main()
{
int n;
scanf("%d",&n);
int x;
for (int i=1;i<=n;i++)
{
scanf("%d",&x);
m[x]=i;
}
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]=m[a[i]];
}
int len=1;
dp[1]=a[1];
for (int i=2;i<=n;i++)
{
if (dp[len]<a[i]) dp[++len]=a[i];
else
{
int l=1,r=len,mid;
while (l!=r)
{
mid=l+r>>1;
if (dp[mid]>a[i]) r=mid;
else l=mid+1;
}
dp[l]=a[i];
}
}
printf("%d",len);