Cod sursa(job #279015)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 12 martie 2009 17:20:06
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#define nmax 100010
int d[nmax], l[nmax], h[nmax], m, n, nh;
FILE *f, *g;

void ins(int x)
{       int k, z;
	h[++nh]=x;
	k=nh;
	while(l[h[k/2]]>l[h[k]] && k<n)
	{       z=h[k]; h[k]=h[k/2]; h[k/2]=z;
		k=k/2;
	}
}

void del(int k)
{	int z, m;
	z=h[nh]; h[nh]=h[k]; h[k]=z;
	nh--;
	while(( (l[h[k]]>l[h[2*k]] && 2*k<=nh)  ||
		(l[h[k]]>l[h[2*k+1]] && 2*k+1<=nh) ) && k<nh)
	{	if(2*k==nh)				m=2*k;
		else	if(l[h[2*k+1]]>l[h[2*k]])    	m=2*k;
			else				m=2*k+1;
		z=h[k]; h[k]=h[m]; h[m]=z;
		k=m;
	}
}

int mod(int x)
{	if(x<0)
		return (-1)*x;
	return x;
}

int main()
{	int i, j, max=-1, x, y, d1;
	f=fopen("orase.in", "r");
	g=fopen("orase.out", "w");
	fscanf(f, "%d%d", &m, &n);
	for(i=1; i<=n; i++)
	{	fscanf(f, "%d%d", &d[i], &l[i]);
		ins(i);
	}
	while(nh)
		del(1);
	for(i=1; i<=500; i++)
		for(j=i+1; j<=500; j++)
		{       x=h[i]; y=h[j];
			d1=mod(d[x]-d[y]);
			if(l[x]+l[y]+d1>max )
				max=l[x]+l[y]+d1;
		}
	fprintf(g, "%d\n", max);
	fclose(g);
	return 0;
}