怎么优化?玄关!
查看原帖
怎么优化?玄关!
1036180
ChampionCyan楼主2024/6/26 11:04
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
int m, k, n, ans = 0;
queue<int> pos[MAXN];
unordered_set<int> mac;
queue<int> ice;

void an_pai(int x) {
	ice.pop(), pos[x].pop();
	if (mac.find(x) == mac.end()) {
		ans++;
		if ((int)mac.size() < k) {
			mac.insert(x);
			return;
		}
		int far = 0, bes;
		for (auto it:mac)
			if (pos[it].empty()) {
				mac.erase(it), mac.insert(x);
				return ;
			} else if (far < pos[it].front())
				far = pos[it].front(), bes = it;
		mac.erase(bes), mac.insert(x);
	}
}

int main() {
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 1, x; i <= n; i++) {
		scanf("%d", &x);
		pos[x].push(i);
		ice.push(x);
	}
	while (ice.front())
		an_pai(ice.front());
	printf("%d", ans);
	return 0;
} 
2024/6/26 11:04
加载中...