rt,思路对着讲解看了,没看出问题,但是始终只对 4 个点。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int aa[2000009],f[2000009];
int _main(int n){
if(n==0){
return 0;
}
for(int i=1;i<=n;i++)
f[i]=0x3f3f3f3f;
f[1]=aa[1];
int len=1;
for(int i=2;i<=n;i++){
int l,r,mid;
l=1,r=len;
if(aa[i]<=f[len])f[++len]=aa[i];
else{
while(l<r){
mid=(l+r)/2;
if(f[mid]<=aa[i])r=mid;
else l=mid+1;
}
f[l]=aa[i];
}
}
return len;
}
int a[2000009];
int b[2000009];
int mp[2000009];
int p;
signed main(){
int n,m;
cin>>n>>m;
int k;
k=0;
for(int i=1;i<=n;i++){
cin>>a[i];
k=max(k,a[i]);
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
bool fl;
fl=1;
for(int i=1;i<=n;i++){
if(mp[a[i]]&&mp[a[i]]!=i-1){
fl=0;
}else{
mp[a[i]]=i;
}
}
if(m<k){
fl=0;
}
if(!fl){
cout<<-1<<endl;
return 0;
}
memset(mp,0,sizeof(mp));
for(int i=1;i<=n;i++){
if(!mp[a[i]]){
mp[a[i]]=++p;
}
}
for(int i=1;i<=m;i++){
b[i]=mp[b[i]];
}
int inn;
inn=0;
for(int i=1;i<=m;i++){
if(b[i]<=i&&b[i]>=i+k-m){
aa[++inn]=b[i]-i;
}
}
cout<<m-_main(inn)<<endl;
return 0;
}