Cod sursa(job #601896)

Utilizator cahemanCasian Patrascanu caheman Data 8 iulie 2011 11:00:32
Problema Lupul Urias si Rau Scor 52
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
long n;
long long j,x,l,nr=0,s=0,y,z;
struct oaie
{
	long long dist,lana;
};
oaie a[100005];
long long h[100005];
void down(int m)
{
	int fiu,aux;
	do
	{
		fiu=0;
		if(2*m<=nr)
		{
			fiu=2*m;
			if(2*m+1<=nr&&h[2*m+1]>h[fiu])
				fiu=2*m+1;
		}
		if(fiu)
			if(h[fiu]>h[m])
			{
				aux=h[m];
				h[m]=h[fiu];
				h[fiu]=aux;
			}
			else
				fiu=0;
	}while(fiu);
}
void build()
{
	int m;
	for(m=n/2;m>=1;m--)
		down(m);
}
int main()
{
	freopen("lupu.in","r",stdin);
	freopen("lupu.out","w",stdout);
	long i;
	scanf("%ld%ld%ld",&n,&x,&l);
	for(i=1;i<=n;i++)
		scanf("%lld%lld",&a[i].dist,&a[i].lana);
	y=0;
	z=x%l;
	for(j=0;j<=x/l;j++)
	{
	for(i=1;i<=n;i++)
		if(a[i].dist<=z&&a[i].dist>=y)
			h[++nr]=a[i].lana;
	build();
	s+=h[1];
	h[1]=0;
	y=z+1;
	z=z+l;
	}
	printf("%lld\n",s);
	return 0;
}