Pagini recente » Cod sursa (job #498428) | Cod sursa (job #885314) | Cod sursa (job #163603) | Cod sursa (job #1546893) | Cod sursa (job #1764210)
#include <stdio.h>
#define mod 666013
#define lim 1000005
unsigned int v[lim],fr[lim],next[lim],lista[mod],n;
void reset(){
int i;
for(i=0;i<mod;i++)
lista[i]=0;
for(i=0;i<=n;i++){
fr[i]=0;
next[i]=0;
}
}
void adauga(int x,int poz){
int ind;
ind=lista[x%mod];
while(ind!=0&&v[ind]!=x)
ind=next[ind];
if(ind!=0)
fr[ind]++;
else{
ind=x%mod;
fr[poz]=1;
next[poz]=lista[ind];
lista[ind]=poz;
}
}
int query(int x){
int ind;
ind=lista[x%mod];
while(ind!=0&&v[ind]!=x)
ind=next[ind];
return fr[ind];
}
void sterge(int x){
int ind;
ind=lista[x%mod];
while(ind!=0&&v[ind]!=x)
ind=next[ind];
fr[ind]--;
}
long long secv(int x){
long long i=1,j=1,cate=0,rasp=0;
for(i=1;i<=n;i++){
adauga(v[i],i);
if(query(v[i])==1)
cate++;
while(cate>x){
if(query(v[j])==1)
cate--;
sterge(v[j]);
j++;
}
rasp=rasp+(i-j+1);
}
return rasp;
}
int main(){
FILE *fin,*fout;
fin=fopen("secv5.in","r");
fout=fopen("secv5.out","w");
int i,st,dr;
long long rasp_st,rasp_dr,rasp;
fscanf(fin,"%u%u%u",&n,&st,&dr);
for(i=1;i<=n;i++)
fscanf(fin,"%u",&v[i]);
rasp_st=secv(st-1);
reset();
rasp_dr=secv(dr);
rasp=rasp_dr-rasp_st;
fprintf(fout,"%lld",rasp);
fclose(fin);
fclose(fout);
return 0;
}