Pagini recente » Cod sursa (job #2895829) | Cod sursa (job #539814) | Cod sursa (job #31868) | Cod sursa (job #88935)
Cod sursa(job #88935)
#include<stdio.h>
struct nod{
long long int vi;
long long int vf;
nod *next;
};
long long int N,L,U,i,x[1050000],a,b,c,cc,bb,f1[1050000],f2[1050000],y,li,vn,sol;
nod *p[200000],*u[200000],*q;
void pune();
int main()
{
FILE *f,*g;f=fopen("secv5.in","r");g=fopen("secv5.out","w");
fscanf(f,"%lld%lld%lld",&N,&L,&U);
for(i=1;i<=N;i++)
{ fscanf(f,"%lld",&y);
vn=y%199999;
q=p[vn];
while(q)
{ if(q->vi==y){ x[i]=q->vf;break;}q=q->next;}
if(!q){li++;x[i]=li;pune();}
}
while(bb<L)
{ b++;
if(b>N) { fprintf(g,"%lld\n",sol);fcloseall();return 0;}
f1[x[b]]++;if(f1[x[b]]==1)bb++;
f2[x[b]]=f1[x[b]];
}
c=b;cc=bb;
while(cc<=U)
{ c++;
if(c>N) cc=U+1;
else { f2[x[c]]++;if(f2[x[c]]==1)cc++;}
}
for(;;)
{
sol+=c-b;
a++;
f1[x[a]]--;
if(f1[x[a]]==0) bb--;
f2[x[a]]--;
if(f2[x[a]]==0) cc--;
while(bb<L)
{ b++;
if(b>N) { fprintf(g,"%lld\n",sol);fcloseall();return 0;}
f1[x[b]]++;if(f1[x[b]]==1)bb++;
}
if(c<=N)
while(cc<=U)
{ c++;
if(c>N) { cc=U+1;c=N+1;}
else { f2[x[c]]++;if(f2[x[c]]==1)cc++;}
}
}
}
void pune()
{ nod *nou;
nou=new nod;
nou->vi=y;
nou->vf=li;
nou->next=0;
if(!p[vn]){p[vn]=nou;u[vn]=nou;return;}
u[vn]->next=nou;
u[vn]=nou;
}