80分求助
查看原帖
80分求助
643820
WangLianda楼主2022/8/30 15:30
#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());

这句话去重

2022/8/30 15:30
加载中...