Pagini recente » Cod sursa (job #1978975) | Cod sursa (job #2233017) | Cod sursa (job #1867565) | Cod sursa (job #875776) | Cod sursa (job #496120)
Cod sursa(job #496120)
#include <stdio.h>
struct hash
{
int nod;
hash *link;
}*H[1000000];
long n,a,b,m,i,x,sol,d[1100000],j;
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];
}
sol=0;
for(i=1;i<=n;i++)
{
x=d[n]-d[i-1];
if(d[i]==d[i-1]) x++;
if(x<a) break;
else
if(a<=x&&x<=b)
{ j=i;
while(j<=n)
{
if(d[i]!=d[j]) break;
j++;
}
sol+=n-j+1;
}
else
if(x>b)
{
j=i;
while(j<=n)
{
if(d[i]!=d[j]) break;
j++;
}
sol+=n-j+1;
j=n;
while(j>0)
{
if(d[j]-d[i-1]<=b) break;
j--;
}
sol-=j-1;
}
}
printf("%ld\n",sol);
return 0;
}