Pagini recente » Cod sursa (job #2185058) | Cod sursa (job #254974) | Cod sursa (job #1115418) | Cod sursa (job #620120) | Cod sursa (job #10214)
Cod sursa(job #10214)
/*
by vlad D.
:)
*/
#include <cstdio>
#include <set>
using namespace std;
long long ret;
long long N, A, B;
long long sol[1048588];
set<long long> Q;
long long i, j;
int main() {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%lld %lld %lld", &N, &B, &A);
for (i=0; i<N; i++) {
int X;
scanf("%lld", &X);
if (Q.find(X) == Q.end()) {Q.insert(X); sol[i+1] = sol[i] + 1;}
else sol[i+1] = sol[i];
}
//Q.clear();
//for (i=1; i<=N; i++) printf("%lld ", sol[i]);
B--;
long long lw = 0;
for (i=1; i<=N; i++) {
long long da = 0;
while (lw <i && sol[i] - sol[lw] > A) {da = 1; lw++;}
// if (da) lw--;
//printf("ll : d %d\n", i, lw);
ret+= i - lw;
}
//printf("ret: %lld\n", ret);
if (B > 0) {
lw = 0;
for (i=1; i<=N; i++) {
long long da = 0;
while (lw <i && sol[i] - sol[lw] > B) {da = 1; lw++;}
//if (da) lw--;
ret-=i - lw;
}}
printf("%lld\n", ret);
return 0;
}