LCS nlogn

想填一下以前的坑,结果发现是巨坑Orz

lcs就是把a序列的位置映射到b序列上,求一个用树状数组lis即可

好简单啊,我真的是咸鱼Orz

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,ans;
int a[100005],b[100005],c[100005],t[110005];
void modify(int x,int Max) {
	for(int i=x; i<=n; i+=i&-i) t[i]=max(t[i],Max);
}
int ask(int x) {
	int rees=0;
	for(int i=x; i; i-=i&-i) res=max(res,t[i]);
	return res;
}
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) scanf("%d",&a[i]),c[a[i]]=i;
	for(int i=1; i<=n; i++) {
		scanf("%d",&b[i]);
		int f=ask(c[b[i]])+1;
		ans=max(ans,f);
		modify(c[b[i]],f);
	}
	printf("%d",ans);
}
我是咸鱼。转载博客请征得博主同意Orz
原文地址:https://www.cnblogs.com/sdfzhsz/p/9282721.html