Pagini recente » Cod sursa (job #740422) | Cod sursa (job #213478) | Cod sursa (job #2090211) | Cod sursa (job #1841461) | Cod sursa (job #496406)
Cod sursa(job #496406)
#include <stdio.h>
long long n,a,b,x,y,m,v[1100000],A=999983,sol,nr[1100000];
long i;
struct hash
{
long long nod,aux;
hash *link;
}*H[1000000];
void add(long long x,long long pos)
{
hash *p;
p=new hash;
p->nod=x;
p->aux=pos;
p->link=H[x%A];
H[x%A]=p;
}
long src(long x)
{
hash *p;
p=H[x%A];
while(p!=NULL)
{
if(p->nod==x) return p->aux;
p=p->link;
}
return 0;
}
long fct(long x)
{
long long pos=1,ds=0,sol=0;
long i;
for(i=1;i<=m;i++) nr[i]=0;
for(i=1;i<=n;i++)
{
if(nr[v[i]]==0) ds++;
nr[v[i]]++;
while(ds>x&&pos<=n)
{
if(nr[v[pos]]==1) ds--;
nr[v[pos]]--;
pos++;
}
sol+=i-pos+1;
}
return sol;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%lld%lld%lld",&n,&a,&b);
for(i=1;i<=n;i++)
{
scanf("%lld",&x);
y=src(x);
if(y==0)
{
add(x,++m);
v[i]=m;
}
else
v[i]=y;
}
sol=fct(b)-fct(a-1);
printf("%lld\n",sol);
return 0;
}