构造最长公共子序列为什么要这样构造序列
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]都可以,而在最长单调上升子序列中只能大于等于,不能大于
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];}
}