Pagini recente » Cod sursa (job #1632435) | Cod sursa (job #1650309) | Cod sursa (job #1813217) | Cod sursa (job #2261417) | Cod sursa (job #10960)
Cod sursa(job #10960)
/*
by vlad D.
:)
*/
#include <cstdio>
#include <time.h>
#include <stdlib.h>
using namespace std;
unsigned int ret;
unsigned int N, A, B;
unsigned int aha[1048590];
unsigned int i, j;
int M = 1124993;
int sol[1125993];
int main() {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%u %u %u", &N, &B, &A);
srand(time(0)%123);
int R = rand()%99;
if (R <=3 ) R = 29;
R = 1;
int pas = 0;
for (i=1; i<=N; i++) {
unsigned int X;
scanf("%u", &X);
int XX = X;
XX*=R;
XX%=M;
if (sol[XX]==0) {pas++; sol[XX] = pas;}
aha[i] = sol[XX];
}
//Q.clear();
int cate = 0;
int last = 1;
for (i=1; i<=pas; i++) sol[i] = 0;
for (i=1; i<=N; i++) {
sol[aha[i]]++; if (sol[aha[i]] == 1) cate++;
while (cate > A) {sol[aha[last]]--; if (sol[aha[last]] == 0) cate--; last++;}
ret+= 1+ i - last ;
}
B--;
last = 1, cate = 0;
for (i=1; i<=pas; i++) sol[i] = 0;
if (B>0)
for (i=1; i <=N; i++) {
sol[aha[i]]++; if (sol[aha[i]] == 1) cate++;
while (cate > B) {sol[aha[last]]--; if (sol[aha[last]] == 0) cate--; last++;}
ret-= i+1 - last;
}
printf("%u\n", ret);
return 0;
}