求调
查看原帖
求调
994729
Epitome楼主2023/12/25 21:17
#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];

bool f(int aa){
	int cnt = 0, sum = INT_MAX, ret = 0;
	for(int i = 1; i <= m; i++){
		// cout << vv[a[i]] << " " << a[i] << " " << v[a[i]] << endl;
		if(vv[a[i]] != 0){
			if(sum == INT_MAX){
				sum = abs(vv[a[i]] - v[a[i]]);
			}
			if(b[i + sum] == a[i] || b[max(0ll, i - sum)] == a[i]){
				cnt++; 
			}else{
				ret = max(ret, cnt);
				cnt = 0;
				sum = INT_MAX;
			}
		}else{
			if(sum == INT_MAX){
				continue;
			}
			ret = max(ret, cnt);
			cnt = 0;
			sum = INT_MAX;
		}
		cout << sum << " " << cnt << " " << ret << endl;
	}
	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:17
加载中...