Pagini recente » Cod sursa (job #1943169) | Cod sursa (job #325278) | Cod sursa (job #2433120) | Cod sursa (job #1691966) | Cod sursa (job #496140)
Cod sursa(job #496140)
#include <stdio.h>
struct hash
{
int nod;
hash *link;
}*H[1000000];
long n,a,b,m,i,x,x1,x2,sol,d[1100000],max[1100000],min[1100000];
void add(long x)
{
hash *p;
p=new hash;
p->nod=x;
p->link=H[x%m];
H[x%m]=p;
}
int src(long x)
{
hash *p;
p=H[x%m];
int ok=0;
while(p!=NULL)
{
if(p->nod==x)
{
ok=1;
break;
}
p=p->link;
}
return ok;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%ld%ld%ld",&n,&a,&b);
m=999983;
for(i=1;i<=m;i++) H[i]=NULL;
d[0]=0;
for(i=1;i<=n;i++)
{
scanf("%ld",&x);
if(src(x)==0)
{
d[i]=d[i-1]+1;
add(x);
}
else d[i]=d[i-1];
}
for(i=1;i<=n;i++)
{
max[i]=0;
min[i]=2000000000;
}
for(i=1;i<=n;i++)
{
if(max[d[i]]<i) max[d[i]]=i;
if(min[d[i]]>i) min[d[i]]=i;
}
sol=0;
for(i=1;i<=n;i++)
{
x=d[n]-d[i]+1;
if(x<a) break;
x1=max[a+d[i]-1];
x2=max[b+d[i]-1];
if(b+d[i]-1>d[n])
{
if(min[a+d[i]-1]<x1) x1=min[a+d[i]-1];
x2=n;
sol+=x2-x1+1;
break;
}
sol+=x2-x1+1;
}
printf("%ld\n",sol);
return 0;
}