Cod sursa(job #74858)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 28 iulie 2007 22:03:45
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
# include <stdio.h>

const long int MAXN=50000;
struct {long int x,l;} oras[MAXN+1];
long int n,m;

void citire()
{
FILE *f=fopen("orase.in","r");
fscanf(f,"%ld%ld",&m,&n);
long int i;
for (i=1;i<=n;i++)
	fscanf(f,"%ld%ld",&oras[i].x,&oras[i].l);
fclose(f);
}

void quick(long int li, long int lf)
{
long int i=li,j=lf,ii=0,jj=-1,aux;
while (i<j)
	{
	if (oras[i].x>oras[j].x)
		{
		aux=oras[i].x;oras[i].x=oras[j].x;oras[j].x=aux;
		aux=oras[i].l;oras[i].l=oras[j].l;oras[j].l=aux;
		aux=ii;ii=-jj;jj=-aux;
		}
	i+=ii;j+=jj;
	}
if (i-li>1) quick(li,i-1);
if (lf-i>1) quick(i+1,lf);
}

long int solve()
{
long int ilast,sol=0;
ilast=1;
long int i;
for (i=2;i<=n;i++)
	{
	if (oras[ilast].l+oras[i].l+oras[i].x-oras[ilast].x>sol)
		sol=oras[ilast].l+oras[i].l+oras[i].x-oras[ilast].x;
	if (oras[i].l>oras[ilast].l+oras[i].x-oras[ilast].x)
		ilast=i;
	}
return sol;
}

void scrie(long int sol)
{
FILE *g=fopen("orase.out","w");
fprintf(g,"%ld\n",sol);
fcloseall();
}

int main()
{
citire();
quick(1,n);
long int sol=solve();
scrie(sol);
return 0;
}