Pagini recente » Cod sursa (job #14893) | Cod sursa (job #1884924) | Cod sursa (job #1673312) | Cod sursa (job #2442324) | Cod sursa (job #217944)
Cod sursa(job #217944)
#include <stdio.h>
#include <string.h>
unsigned int n, l, u, v[1500000], nr, rez1, rez2, rez;
int hash[2700000], viz[2700000];
unsigned int hash_function(unsigned int x)
{
int y = x % 2666013;
while (hash[y] && (hash[y] != x)) y++;
hash[y] = x;
return y;
}
unsigned int caut(unsigned int x)
{
unsigned int xx = hash_function(x);
if (viz[xx]) return 1;
return 0;
}
void add(unsigned int x)
{
unsigned int poz = hash_function(x);
if (!caut(x))
{
viz[poz]++;
nr++;
}
else viz[poz]++;
}
void sterg(unsigned int x)
{
unsigned int poz = hash_function(x);
viz[poz]--;
if (!viz[poz]) nr--;
}
void citire()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
unsigned int i, j;
char s[100];
scanf("%d %d %d\n",&n,&l,&u);
for (i = 1; i <= n; i++)
{
scanf("%s",s);
j = 0;
while (s[j] <= '9' && s[j] >= '0') v[i] = v[i] * 10 + s[j++] - '0';
}
}
int main()
{
citire();
unsigned int i, j;
j = 0;
for (i = 1; i <= n; i++)
{
add(v[i]);
if (nr >= l)
while (nr >= l)
{
j++;
sterg(v[j]);
}
rez1 += j;
}
nr = 0;
j = 0;
for (i = 1; i <= n; i++)
{
add(v[i]);
if (nr >= u + 1)
while (nr >= u + 1)
{
j++;
sterg(v[j]);
}
rez2 += j;
}
rez = rez1 - rez2;
printf("%d\n",rez);
return 0;
}