求助
  • 板块P1638 逛画展
  • 楼主myl_coder
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/7 17:42
  • 上次更新2024/7/7 20:16:11
查看原帖
求助
1382496
myl_coder楼主2024/7/7 17:42

谁能帮帮我``` #include <bits/stdc++.h>

using namespace std;

long long a[1000010], minn = INT_MAX, minl, minr; long long n, m;

bool check (long long k) {

if (k < m) {
	return false;
} else {
	long long b[2010] = {}; 
	long long cnt = 0;
	long long p1 = 1;
	for (long long i = 1; i <= k; i++) {
		if (!b[a[i]]) {
			++cnt;
		}
		b[a[i]]++;
	}
	if (cnt >= m) {
		return true;
	}
	
	for (long long i = k + 1; i <= n; i++) {
		
		if (b[a[p1]] == 1) {
			--cnt;
		}b[a[p1]]--;
		++p1;
		
		if (!b[a[i]]) {
			++cnt;
		}
		b[a[i]]++;
		
		if (cnt >= m) {
			if (minn > k) {
				minn = k;
				minl = p1;
				minr = i;
			}
			return true;
		}
	}
	return false;
}

}

int main() {

cin >> n >> m;

for (long long i = 1; i <= n; i++) {
	cin >> a[i];
}
if (m == 1) {
	cout << 1 << " " << 1;
	return 0;
} else if (m == n) {
	cout << 1 << " " << n;
	return 0;
}
long long l = 1, r = n;
while (l < r) {
	long long mid = (l + r) / 2;

// cout << mid << endl; if (check(mid)) { r = mid; } else { l = mid + 1; } } cout << minl << " " << minr;

return 0;

}

91分,第五个点错了,WA

求帮助
2024/7/7 17:42
加载中...