Pagini recente » Cod sursa (job #687418) | Monitorul de evaluare | Cod sursa (job #1038029) | Rating ciocoiu stefania (stefania23) | Cod sursa (job #88430)
Cod sursa(job #88430)
#include<stdio.h>
struct nod{
unsigned long int indice;
unsigned long int valoare;
nod *st;
nod *dr;
};
unsigned long int N,L,U,i,x[1050],a,b,c,cc,bb,f1[1050],f2[1050],sol,y,last_indice;
nod *radacina;
void go(nod *rr);
int main()
{
FILE *f,*g;f=fopen("secv5.in","r");g=fopen("secv5.out","w");
fscanf(f,"%lu%lu%lu",&N,&L,&U);
fscanf(f,"%lu",&y);
radacina=new nod;radacina->indice=1;radacina->valoare=y;
radacina->st=0;radacina->dr=0;
x[1]=1;last_indice=1;
for(i=2;i<=N;i++)
{ fscanf(f,"%lu",&y);
go(radacina);
}
while(bb<L&&b<=N)
{ b++;
if(b==N+1) { fprintf(g,"%lu\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<=N)
{ c++;
if(c==N+1) cc=U;
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<=N)
{ b++;
if(b==N+1) { fprintf(g,"%lu\n",sol);fcloseall();return 0;}
f1[x[b]]++;if(f1[x[b]]==1)bb++;
}
while(cc<=U&&c<=N)
{ c++;
if(c==N+1) cc=U+1;
else { f2[x[c]]++;if(f2[x[c]]==1)cc++;}
}
}
}
void go(nod *rr)
{ nod *nou;
if(rr->valoare==y){x[i]=rr->indice;return;}
if(rr->valoare>y)
{ if(rr->st){go(rr->st);return;}
last_indice++;
nou=new nod;
nou->valoare=y;
nou->indice=last_indice;
nou->st=0;
nou->dr=0;
rr->st=nou;
x[i]=last_indice;
return;
}
if(rr->dr){go(rr->dr);return;}
last_indice++;
nou=new nod;
nou->valoare=y;
nou->indice=last_indice;
nou->st=0;
nou->dr=0;
x[i]=last_indice;
rr->dr=nou;
return;
}