P9572
题目大意:
有两个数组 123,则 123123, 123123123。
让你求出
首先思考如果无视
设
所以对于
于是可以得出最长上升子序列,只需将其放入
求
如果这个元素不管怎么填都在
查找可以放下的位置可以二分查找,总复杂度
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int s1[N];
int a[N],b[N];
int c[N],d[N];
int top1,top2;
int n,m,c1,c2;
vector<int> wei[N];
signed main()
{
cin>>n>>m>>c1>>c2;
for(int i=1;i<=n;i++)
{
cin>>a[i];
s1[a[i]]=1;
}
for(int i=1;i<=m;i++)
{
cin>>b[i];
if(s1[b[i]])
s1[b[i]]=2;
}
for(int i=1;i<=n;i++)
{
if(s1[a[i]]==2)
{
wei[a[i]].push_back(i);
}
}
for(int i=1;i<=m;i++)
{
if(s1[b[i]]==2)
d[++top2]=b[i];
}
int now=0,ans=1;
for(int i=1;i<=top2;i++)
{
int nt=lower_bound(wei[d[i]].begin(),wei[d[i]].end(),now+1)-wei[d[i]].begin();
if(now>=wei[d[i]][wei[d[i]].size()-1])
{
ans++;
now=wei[d[i]][0];
}
else
{
now=wei[d[i]][nt];
}
}
cout<<c1*top2<<' '<<c2*ans;
return 0;
}