#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
int n;
cin>>n;
int a[n],b[n];
for(auto&i:a) cin>>i;
for(auto&i:b) cin>>i;
int maxx=-1;
vector<vector<int>> v;
for(int i=0;i<=n;i++) v.push_back(vector<int>{});
for(int i=0;i<=n;i++)
v[i].push_back(0);
for(int i=0;i<n;i++)
if(a[i]==b[i])
v[a[i]].push_back(i);
for(int i=0;i<=n;i++)
v[i].push_back(n-1);
for(int i=0;i<v.size();i++)
v[i].erase(unique(v[i].begin(),v[i].end()),v[i].end());
// for(int i=0;i<=n;i++) {
// cout<<i<<":";
// for(auto&j:v[i])
// cout<<j<<' ';
// cout<<endl;
// }
for(int i=0;i<v.size();i++)
for(int j=0;j<v[i].size()-1;j++)
maxx=max(maxx,v[i][j+1]-v[i][j]+1-i);
cout<<maxx;
return 0;
}
感觉其他发帖的人犯的错误好像都考虑到了。 我的思路抄的是倒数第一篇题解的。
大致思路:把a[i]=b[i]的位置存储到v[i]里面,然后直接枚举mex。
这里在0和n-1的位置手动加上,便于统计边界,但是这样有可能会产生重复值,所以
for(int i=0;i<v.size();i++)
v[i].erase(unique(v[i].begin(),v[i].end()),v[i].end());
这句话去重