Cod sursa(job #390038)

Utilizator vladbBogolin Vlad vladb Data 2 februarie 2010 20:05:53
Problema Orase Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>

long m,dist;
int n,cont;
struct oras { long d,l;
			} a[50001];
			
void citire()
{	int i;
	freopen("orase.in","r",stdin);
	scanf("%ld%d",&m,&n);
	for(i=1;i<=n;i++)
		scanf("%ld%ld",&a[i].d,&a[i].l);
	fclose(stdin);
}

void qsort(oras a[100],int x,int y)
{	int i,j,p;
	oras aux;
	if(x<y)
	{	i=x-1;
		j=y+1;
		p=a[(x+y)/2].d;
		while(i<j)
		{	do i++; while(a[i].d<p);
			do j--; while(a[j].d>p);
			if(i<j) { aux=a[i];
					  a[i]=a[j];
					  a[j]=aux;
					}
		}
		qsort(a,x,i-1);
		qsort(a,j+1,y);
	}
}

void calculeaza()
{   int i;
	dist=a[1].l-a[1].d;
	for(i=2;i<=n;i++)
		if(a[i].l-a[i].d>dist) cont=i;
	dist=0;
	for(i=cont;i<=n;i++)
		if(dist<a[i].l+a[cont].l+a[i].d-a[cont].d) dist=a[i].l+a[cont].l+a[i].d-a[cont].d;
}

void afisare()
{	freopen("orase.out","w",stdout);
	printf("%ld\n",dist);
	fclose(stdout);
}

int main()
{	citire();
	qsort(a,1,n);
	calculeaza();
	afisare();
	return 0;
}