Pagini recente » Cod sursa (job #1633788) | Cod sursa (job #2379371) | Cod sursa (job #1322767) | Cod sursa (job #1081152) | Cod sursa (job #1568283)
#include <bits/stdc++.h>
using namespace std;
int x[500010];
int f[1000100];
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;
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("%d", &x[i]);
x[i] = ((long long)5 * x[i]) % 666013;
}
printf("%lld", solve(n, u) - solve(n, p - 1));
return 0;
}