Pagini recente » Cod sursa (job #1302021) | Istoria paginii monthly-2012/runda-9/solutii | Cod sursa (job #19364) | Cod sursa (job #1595887) | Cod sursa (job #172457)
Cod sursa(job #172457)
#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);
}