P9572 Colorful Days♪ 题解
赛时口胡的竟然过了。
首先考虑到,在
然后转向第二问。
考虑记录
时间复杂度
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1000005];
int n,m,p,c1,c2,a[1000005],b[1000005],ans;
int main()
{
scanf("%d%d%d%d",&n,&m,&c1,&c2);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
v[a[i]].push_back(i);//记录每个数对应的所有编号
}
for(int i=1;i<=m;i++)
{
scanf("%d",&b[i]);
if(v[b[i]].size()) b[++p]=b[i];
}
m=p;
printf("%d ",p*c1);
int lst=0;
for(int i=1;i<=m;i++)
{
auto t=lower_bound(v[b[i]].begin(),v[b[i]].end(),lst+1);//贪心选择比其大的当中编号尽可能小的
if(t==v[b[i]].end())//找不到
{
ans++;
lst=*v[b[i]].begin();
}
else lst=*t;
}
cout<<++ans*c2;
return 0;
}