求调
查看原帖
求调
994729
Epitome楼主2023/12/25 21:15
#include <bits/stdc++.h>

#define int long long

using namespace std;

const int hutao = 5e5 + 5;

int n, m, a[hutao], ans, b[hutao];
int v[hutao], vv[hutao], vvv[hutao];

bool f(int aa){
	int ret = 0;
	fill(vvv + 1, vvv + m + 1, 0);
	for(int i = 1; i <= m; i++){
		// cout << vv[a[i]] << " " << a[i] << " " << v[a[i]] << endl;
		if(vv[a[i]] != 0){
			vvv[(a[i] - vv[a[i]] + m) % m]++;
		}
	}
	for(int i = 1; i <= n; i++){
		ret = max(ret, vvv[i]);
	}
	return ret >= aa;
}

int d(){
	int ret = 0;
	for(int i = 1; i <= n; i++){
		ret += v[i] == 0 && vv[i] == 0;
	}
	return ret;
}

signed main(){
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		cin >> a[i];
		v[a[i]] = i;
	}
	for(int i = 1; i <= m; i++){
		cin >> b[i];
		vv[b[i]] = i;
	}
	int r = n, l = 0;
	while(l < r){
		int m = (l + r + 1) >> 1;
		if(f(m) == 1){
			l = m;
		}else{
			r = m - 1;
		}
	}
	cout << l + d();
	return 0;
}
2023/12/25 21:15
加载中...