Pagini recente » Cod sursa (job #74502) | Cod sursa (job #1283355) | Cod sursa (job #2011555) | Cod sursa (job #680991) | Cod sursa (job #10912)
Cod sursa(job #10912)
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define NMAX (1 << 18)
#define LL long long
#define MOD1 123456789
#define MOD2 999993339
#define MOD3 987654321
#define MOD4 111133331
#define NMOD 4
int N, L, U;
unsigned int MD;
unsigned int a[NMAX];
int pz[NMAX];
int nap[NMAX];
int nap1[NMAX];
int MOD[] = {MOD1, MOD2, MOD3, MOD4};
unsigned int hash[NMOD][NMAX + 5];
int jeg[NMOD][NMAX + 5];
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d\n", &N, &L, &U);
int i, j;
int lung = U, lung1 = L - 1;
int p, nr = 0, q, nr1 = 0;
LL rez = 0;
p = 0;
q = 0;
char s[20];
int kkt = 0;
for (i = 0; i < N; i++) {
fgets(s, 20, stdin);
for (j = 0; '0' <= s[j] && s[j] <= '9'; j++) a[i] = a[i] * 10 + s[j] - '0';
for (j = 0; j < NMOD; j++) {
MD = (a[i] * MOD[j]) >> 14;
if (!hash[j][MD]) {
pz[i] = kkt;
hash[j][MD] = a[i];
jeg[j][MD] = kkt;
kkt++;
break;
}
if (hash[j][MD] == a[i]) {
pz[i] = jeg[j][MD];
break;
}
}
if (j == NMOD) {
printf("-1\n");
return 0;
}
nr += ++nap[pz[i]] == 1;
nr1 += ++nap1[pz[i]] == 1;
for (; nr > lung; nr -= --nap[pz[p]] == 0, p++);
for (; nr1 > lung1; nr1 -= --nap1[pz[q]] == 0, q++);
rez += q - p;
}
printf("%lld\n", rez);
fclose(stdin);
fclose(stdout);
return 0;
}