构造最长公共子序列为什么要这样构造序列
cpp
for(int i=1;i<=n;++i)
{
int k;
cin>>k;
b[k]=i;
}
for(int i=1;i<=n;++i)
{
int k;
cin>>k;
a[i]=b[k];
}
并且为什么要求上升序列,是有什么数学知识包含在其中吗?
为什么在求最长公共子序列时,f[mid]大于等于或大于a[i]都可以,而在最长单调上升子序列中只能大于等于,不能大于
cpp
for(int i=1;i<=n;++i)
{
if(f[ans]<a[i]) f[++ans]=a[i];
else
{
int l=1,r=ans;
while(l<r)
{
int mid=(l+r)>>1;
if(f[mid]>a[i]) r=mid;
else l=mid+1;
}
f[l]=a[i];
}
}