Cod sursa(job #336422)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 31 iulie 2009 15:40:52
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
struct vect
{
	int d,l;
};
int n;
vect v[65536];

void read()
{
	freopen("orase.in","r",stdin);
	freopen("orase.out","w",stdout);
	scanf("%d",&n);
	scanf("%d",&n);
	int i;
	for(i=1;i<=n;i++)
		scanf("%d%d",&v[i].d,&v[i].l);
}

int part(int st, int dr)
{
	int i,j,m;
	vect aux,p;
	m=(st+dr)>>1;
	p=v[m];
	i=st-1;
	j=dr+1;
	while(1)
	{
		do{++i;}while(v[i].d<p.d);
		do{--j;}while(v[j].d>p.d);
		if(i<j)
		{
			aux=v[i];
			v[i]=v[j];
			v[j]=aux;
		}
		else
			return j;
	}
}

void quick(int st, int dr)
{
	int p;
	if(st<dr)
	{
		p=part(st,dr);
		quick(st,p);
		quick(p+1,dr);
	}
}

void rez()
{
	int i,j=1,max=v[j].l-v[j].d,maxim=-1;
	for(i=2;i<=n;i++)
	{
		for(;j<i;j++)
			if(v[j].l-v[j].d>max)
				max=v[j].l-v[j].d;
		if((v[i].l+v[i].d+max)>maxim)
			maxim=v[i].l+v[i].d+max;
	}
	printf("%d\n",maxim);
}

int main()
{
	read();
	quick(1,n);
	rez();
	return 0;
}