Pagini recente » Cod sursa (job #1777875) | Cod sursa (job #1639678) | Cod sursa (job #1741009) | Cod sursa (job #2193464) | Cod sursa (job #1282590)
#include <stdio.h>
#define MAXN 50000
int x[MAXN], y[MAXN], n;
inline int tata(int p){
return (p-1)/2;
}
inline int fiust(int p){
return p*2+1;
}
inline int fiudr(int p){
return p*2+2;
}
inline void swap(int a, int b){
int aux=x[a];
x[a]=x[b];
x[b]=aux;
aux=y[a];
y[a]=y[b];
y[b]=aux;
}
inline void coborare(int p){
int q, f;
f=1;
while((f==1)&&(fiust(p)<n)){
q=fiust(p);
if((fiudr(p)<n)&&(x[q]<x[fiudr(p)])){
q=fiudr(p);
}
if(x[p]<x[q]){
swap(p, q);
p=q;
}else{
f=0;
}
}
}
inline void heapify(){
int i;
for(i=tata(n-1); i>=0; i--){
coborare(i);
}
}
inline void heapSort(){
while(n>1){
n--;
swap(0, n);
coborare(0);
}
}
inline void mySort(){
int cn=n;
heapify();
heapSort();
n=cn;
}
int main(){
int lim, i, rez, max;
FILE *fin, *fout;
fin=fopen("orase.in", "r");
fout=fopen("orase.out", "w");
fscanf(fin, "%d%d", &lim, &n);
for(i=0; i<n; i++){
fscanf(fin, "%d%d", &x[i], &y[i]);
}
mySort();
rez=x[1]-x[0]+y[0]+y[1];
max=rez;
for(i=2; i<n; i++){
rez+=x[i]-x[i-1]+y[i]-y[i-1];
if(rez<y[i-1]+x[i]-x[i-1]+y[i]){
rez=y[i-1]+x[i]-x[i-1]+y[i];
}
if(max<rez){
max=rez;
}
}
fprintf(fout, "%d\n", max);
fclose(fin);
fclose(fout);
return 0;
}