题意:给定一个序列A,给定一个序列B,在A中找到满足序列B的最长不下降子序列
思路:维护一个B的顺序表,以O(1)得到颜色之间的大小关系,LIS模板
#include<iostream>
#include<vector>
using namespace std;
const int N = 210, M = 10010;
int order[N];
int f[M], s[M];
int n, m, l;
int main(){
cin >> n >> m;
for(int i = 1; i <= m; i ++){
int c;
cin >> c;
order[c] = i;
}
cin >> l;
for(int i = 0; i < l; i ++) cin >> s[i];
for(int i = 0; i < l; i ++){
int mx = 0;
for(int j = 0; j < i; j ++)
if(order[s[j]] <= order[s[i]])
mx = max(mx, f[j]);
if(order[s[i]]) f[i] = mx + 1;
}
cout << f[l - 1] << endl;
return 0;
}