P9572 Colorful Days♪ 题解报告
_XHY20180718_ · · 题解
题意简述:
给定
思路:
既然要求最长公共子序列,那么有效元素一定是在
时间复杂度:
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,a[N],b[N],k=1;
vector<int>c[N];
char vis[N];
bool c1,c2;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m>>c1>>c2;
for(int i=1; i<=n; ++i)cin>>a[i],vis[a[i]]=2;
for(int i=1; i<=m; ++i){
cin>>b[i];
if(!vis[b[i]])--m,--i;
else vis[b[i]]=1;
}
for(int i=1; i<=n; ++i)
if(vis[a[i]]==1)c[a[i]].push_back(i);
int lst=0;
for(int i=1; i<=m; ++i){
auto t=lower_bound(c[b[i]].begin(),c[b[i]].end(),lst+1);
if(t==c[b[i]].end())++k,lst=c[b[i]][0];else lst=*t;
}cout<<m*c1<<' '<<k*c2;
return 0;
}