Cod sursa(job #210753)

Utilizator za_wolfpalianos cristian za_wolf Data 28 septembrie 2008 22:28:57
Problema Secventa 5 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NMAX 1151000
unsigned long in,sf,i,j,n,m,k,l,a,b,c,y[NMAX];
unsigned long z[NMAX];
char cc,ss[32];
long long s;
struct kkt
{
	unsigned long X,Y;
};
kkt x[NMAX];
int sort(const void *a, const void *b)
{
	kkt x=*(kkt *)a , y=*(kkt *)b;
	if (x.X<y.X)
		return -1;
	if (x.X>y.X)
		return 1;
	return 0;
}
long long kkt(unsigned long m)
{
	long long s=0;
	in=1;
	sf=1;
	z[y[1]]=1;
	k=1;
	while (in<=sf||sf<n)
	{
		while (k<=m&&sf<=n)
		{
			sf++;
			if (!z[y[sf]])
				k++;
			z[y[sf]]++;
		}
		z[y[sf]]--;
		sf--;
		k--;
		s+=sf-in+1;
		z[y[in]]--;
		if (z[y[in]]==0)
			k--;
			in++;
	}
	return s;
}
int main()
{
	freopen("secv5.in","r",stdin);
	freopen("secv5.out","w",stdout);
	scanf("%lu%lu%lu",&n,&b,&c);
/*	for (i=1;i<=n;i++)
	{
		scanf("%lu",&x[i].X);
		x[i].Y=i;
	}*/
	scanf("%c",&cc);
	for (i=1;i<=n;i++)
	{
		gets(ss);
		m=strlen(ss)-1;
		for (j=0;j<=m;j++)
			x[i].X=x[i].X*10+(ss[j]-48);
		x[i].Y=i;
	}

	qsort(x+1,n,sizeof(x[0]),sort);
	k=1;
	for (i=1;i<=n;i++)
	{
		y[x[i].Y]=k;
		if (x[i].X!=x[i+1].X)
			k++;
	}
	s=kkt(c);
	s-=kkt(b-1);
	printf("%lld\n",s);
	return 0;
}