玄关7pts求调附Hack
查看原帖
玄关7pts求调附Hack
1036180
ChampionCyan楼主2024/6/25 14:50
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200001;
int n, m, k, ans = 0, cnt = 1;
bool has[MAXN];
int mac[MAXN];
int a[MAXN];
queue<int> nex[MAXN];

struct node {
	int j;
	bool operator < (const node &it) const {
		if (nex[it.j].empty())
			return false;
		if (nex[j].empty())
			return true;
		return nex[it.j].front() < nex[j].front();
	}
};

priority_queue<node, vector<node>, less<node> > q;

int main() {
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 1; i <= n; i++)
		scanf("%d", a + i), nex[a[i]].push(i);
	for (int i = 1; i <= n; i++) {
		nex[a[i]].pop();
		if (has[a[i]])
			continue;
		ans++;
		int bes;
		if (cnt <= k)
			bes = cnt++;
		else
			bes = q.top().j;
		has[mac[bes]] = false;
		mac[bes] = a[i];
		has[a[i]] = true;
		if (!q.empty())
			q.pop();
		q.push({bes});
	}
	printf("%d", ans);
	return 0;
}

Hack:

4 3 2
1
2
3
2
2024/6/25 14:50
加载中...