Pagini recente » Cod sursa (job #1566613) | Cod sursa (job #504892) | Cod sursa (job #2091156) | Cod sursa (job #1060284) | Cod sursa (job #292881)
Cod sursa(job #292881)
#include <stdio.h>
#define Mod 1234561
#define Nmax 1100100
unsigned h[Mod+Nmax], cnt=Mod, COD;
unsigned t[Mod+Nmax];
unsigned w[Mod+Nmax];
unsigned a[Nmax];
unsigned f[Nmax],n,l,u;
unsigned atou(char *x)
{
unsigned ret = 0;
while (*x != '\n')
ret = ret*10 + *x - '0',
++x;;
return ret;
}
long long fct(unsigned k)
{
unsigned p = 1;
unsigned nr = 0;
long long ret = 0;
for (unsigned i=1;i<=COD;++i)
f[i]=0;
for (unsigned i=1;i<=n;++i)
{
++f[a[i]];
if (f[a[i]] == 1)
++nr;
while (nr > k)
{
--f[a[p]];
if (f[a[p]] == 0)
--nr;
++p;
}
ret += i-p+1;
}
return ret;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d\n", &n,&l,&u);
--l;
char buff[32];
unsigned p;
for (unsigned i=1;i<=n;++i)
{
fgets(buff,32,stdin);
a[i] = atou(buff);
p = a[i]%Mod;
while (h[p] != a[i] && t[p] != 0)
p = t[p];
if (h[p] == a[i])
a[i] = w[p];
else
{
t[p] = ++cnt;
p = cnt;
h[p] = a[i];
w[p] = ++COD;
a[i] = w[p];
}
}
printf("%lld\n", fct(u)-fct(l));
return 0;
}