Pagini recente » Cod sursa (job #2235085) | Cod sursa (job #3154271) | Cod sursa (job #2249239) | Cod sursa (job #3030814) | Cod sursa (job #11495)
Cod sursa(job #11495)
#include <stdio.h>
#include <string.h>
#include <map>
#define NMAX (1 << 20)+1
using namespace std;
FILE *f = fopen("secv5.in","rt"), *g = fopen("secv5.out","wt");
map<unsigned long int,unsigned long int> hash;
unsigned long int a[NMAX],n,i,j,k,v[NMAX],min1,max1;
unsigned long int L[NMAX];
void citire()
{
unsigned long int nr=0;
fscanf(f,"%ld %ld %ld",&n,&min1,&max1);
for (i=1;i<=n;i++)
{fscanf(f,"%ld",&k);
if (hash[k]) a[i]=hash[k];
else {a[i]=++nr;
hash[k]=nr;
}
}
}
unsigned long int calcul(unsigned long int x)
{
unsigned long int start=1,final=0,nr=0;
for (i=1;i<=n;i++)
{v[i]=0;L[i]=0;}
while (final<=n)
{
final++;
v[a[final]]++;
if (v[a[final]]==1) nr++;
while (nr>x) {start++;
v[a[start-1]]--;
if (v[a[start-1]]==0) nr--;
}
L[final]=start;
// if (L[final]==0) L[final]=final;
}
unsigned long int sol=0;
for (i=1;i<=n;i++)
sol=sol + (unsigned long int) (i - L[i]+1);
/*for (i=1;i<=n;i++)
fprintf(g,"%ld ",L[i]);
fprintf(g,"\n");*/
return sol;
}
int main()
{
citire();
unsigned long int s1,s2;
/*for (i=1;i<=n;i++)
fprintf(g,"%ld ",a[i]);
fprintf(g,"\n");*/
s1=calcul(min1-1);
s2=calcul(max1);
fprintf(g,"%lld\n",s2-s1);
fclose(f);
fclose(g);
return 0;
}