Pagini recente » Cod sursa (job #892960) | Cod sursa (job #1912104) | Cod sursa (job #562999) | Cod sursa (job #1112370) | Cod sursa (job #292873)
Cod sursa(job #292873)
#include <stdio.h>
#include <stdlib.h>
#define Mod 1234561
#define Nmax 1100100
int h[Mod+Nmax], cnt=Mod, COD;
int t[Mod+Nmax];
int w[Mod+Nmax];
int a[Nmax];
int f[Nmax],n,l,u;
long long fct(int k)
{
int p = 1;
int nr = 0;
long long ret = 0;
for (int i=1;i<=COD;++i)
f[i]=0;
for (int 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];
int p;
for (int i=1;i<=n;++i)
{
fgets(buff,32,stdin);
a[i] = atoi(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;
}