Cod sursa(job #390043)

Utilizator vladbBogolin Vlad vladb Data 2 februarie 2010 20:15:55
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>

long m,dist,max;
int n;
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,d,maxx;
	dist=a[1].l-a[1].d;
	for(i=2;i<=n;i++)
	{	maxx=0;
		d=a[i].l-a[i].d;
		if(d<dist) maxx=a[i].l+a[i].d+dist;
		else {  maxx=a[i].l+a[i].d+d;
				dist=d;
			 }
		if(max<maxx) max=maxx;
	}
}	

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

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