#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 true;
if (nex[j].empty())
return false;
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++) {
if (has[a[i]])
continue;
ans++;
int bes;
if (q.empty() || 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;
}
已知 node 结构体重载错误,求调!