Pagini recente » Cod sursa (job #2509816) | Cod sursa (job #2768191) | Cod sursa (job #820037) | Cod sursa (job #2341660) | Cod sursa (job #496408)
Cod sursa(job #496408)
#include <stdio.h>
unsigned long long n,a,b,x,y,m,v[1100000],A=999983,sol,nr[1100000],i;
struct hash
{
unsigned long long nod,aux;
hash *link;
}*H[1000000];
void add(unsigned long long x,unsigned 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(unsigned long 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)
{
unsigned long long pos=1,ds=0,sol=0,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;
}