Cod sursa(job #172456)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 6 aprilie 2008 15:03:57
Problema Orase Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#include <stdlib.h>
struct ab{
	int a,b;
};
int n;
ab v[50001];
int comp(const void *a,const void*b){
	ab *aa=(ab*)a,*bb=(ab*)b;
	ab aaa=*aa,bbb=*bb;
	if(aaa.a>bbb.a) return 1;
	if(aaa.a==bbb.a && aaa.b<bbb.b) return -1;
	if(aaa.a<bbb.a) return -1;
	return 0;
}
int main(){
	int m,max,drum,i;
	freopen("orase.in","r",stdin);
	freopen("orase.out","w",stdout);
	scanf("%d%d",&m,&n);
	for(i=1;i<=n;i++)
		scanf("%d%d",&v[i].a,&v[i].b);
	v[0].a=v[0].b=-1;
	qsort(v,n+1,sizeof(v[0]),comp);
	max=0;
	drum=v[2].a-v[1].a+v[2].b+v[1].b;
	max=drum;
	for(i=3;i<=n;i++){
		if(drum+v[i].a-v[i-1].a+v[i].b-v[i-1].b>v[i].b+v[i-1].b+v[i].a-v[i-1].a) drum+=v[i].a-v[i-1].a+v[i].b-v[i-1].b;
		else drum=v[i].b+v[i-1].b+v[i].a-v[i-1].a;
		if(drum>max) max=drum;
	}
	printf("%d",max);
}