弱智代码求条
  • 板块学术版
  • 楼主I_Love_DS
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/22 16:32
  • 上次更新2024/9/22 16:33:14
查看原帖
弱智代码求条
1118614
I_Love_DS楼主2024/9/22 16:32
#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 50;

int n, m, k;
int a[N], s[3][N];

struct node {
	int l, r;
	node() {}
	node(int L, int R) {l = L, r = R;}
} _[2][N];
int cnt[2];

int main() {
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	// if (!k) {
	// int l = 1, ans = 0;
	// for (int i = 1; i <= n; i++) 
	// if (a[i] != a[i + 1]) 
	// ans = max(ans, i - l + 1), l = i + 1;
	// printf("%d", ans);
	// } else if (n <= 1000) {
	// int ans = 0, cnt = 0, d = 0;
	// for (int i = 1; i <= n; i++) {
	// cnt = 0, d = 0;
	// for (int j = i; j >= 1; j--) {
	// if (cnt > k) break;
	// if (a[j] == a[i]) ++d;
	// else ++cnt;
	// }
	// ans = max(ans, d);
	// }
	// printf("%d", ans);
	// } else {
	int ans = 0;
	for (int i = 1; i <= n; i++) s[a[i]][i] = s[a[i]][i - 1] + 1;
	int L = 1;
	a[n + 1] = 1 << 30;
	for (int i = 1; i <= n; i++) {
		if (a[i] != a[i + 1]) 
			_[a[i]][++cnt[a[i]]] = node(L, i), L = i + 1;
	}
	for (int i = 1; i <= 2; i++) {
		for (int j = 1; j <= cnt[i]; j++) {
			int l = 0, r = j;
			while (l + 1 < r) {
				int mid = (l + r) / 2;
				if ((s[a[i] ^ 3][_[a[i]][j].r] - s[a[i] ^ 3][_[a[i]][mid].l - 1]) <= k) r = mid;
				else l = mid;
			}
			ans = max(ans, s[a[i]][_[a[i]][j].r] - s[a[i]][_[a[i]][r].l - 1]);
			cout << i << " " << j << " " << s[a[i]][_[a[i]][j].r] - s[a[i]][_[a[i]][r].l - 1] << endl; // 死循环
		}
	}
	printf("%d", ans);
	//}
	return 0;
}
2024/9/22 16:32
加载中...