Pagini recente » Cod sursa (job #3140688) | Cod sursa (job #1572134) | Cod sursa (job #2517844) | Cod sursa (job #2291944) | Cod sursa (job #1568285)
#include <bits/stdc++.h>
using namespace std;
unsigned x[1000010];
unordered_map <unsigned, int> f;
int cnt, n, k;
bool good(int pos) {
if (pos > n)
return 0;
if (cnt < k) {
cnt += (f[x[pos]] == 0);
++f[x[pos]];
return 1;
}
if (cnt == k) {
if (f[x[pos]] == 0)
return 0;
++f[x[pos]];
return 1;
}
}
long long solve(int n, int _k) {
int i, ptr = 0, best = 0;
long long res = 0;
cnt = 0;
k = _k;
for (int i = 0; i < 666013; ++i)
f[i] = 0;
for (int i = 1; i <= n; ++i) {
if (ptr < i) {
++ptr;
cnt = 1;
f[x[ptr]] = 1;
}
while (good(ptr + 1))
++ptr;
--f[x[i]];
if (f[x[i]] == 0) {
--cnt;
f.erase(x[i]);
}
res += ptr - i + 1;
}
return res;
}
int main() {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
int p, u;
scanf("%d%d%d", &n, &p, &u);
for (int i = 1; i <= n; ++i)
scanf("%ud", &x[i]);
printf("%lld", solve(n, u) - solve(n, p - 1));
return 0;
}