Pagini recente » Cod sursa (job #1250773) | Cod sursa (job #2629794) | Cod sursa (job #1918859) | Cod sursa (job #2690559) | Cod sursa (job #1605530)
#include <stdio.h>
#include <stdlib.h>
#define IN "orase.in"
#define OUT "orase.out"
#define NMAX 50001
struct CITY{
int dist, len;
} v[NMAX];
int n, m;
void read(void){
int i;
scanf ("%d%d", &m, &n);
for (i = 1; i <= n; ++ i)
scanf ("%d%d", &v[i].dist, &v[i].len);
}
inline void swap (struct CITY *a, struct CITY *b){
struct CITY aux;
aux = *a;
*a = *b;
*b = aux;
}
void quickSort (int left, int right){
int i, j, pivot;
i = left, j = right, pivot = v[(left + right) / 2].dist;
while (i <= j){
while (v[i].dist < pivot)
++ i;
while (v[j].dist > pivot)
-- j;
if (i <= j){
swap (&v[i], &v[j]);
++ i;
-- j;
}
}
if (left <= j)
quickSort (left, j);
if (i <= right)
quickSort (i, right);
}
inline int max (int a, int b){
if (a >= b)
return a;
return b;
}
int best (void){
int sum, bestSum, i, sum1, sum2;
sum = 0, bestSum = 0;
for (i = 2; i <= n; ++i){
sum1 = v[i - 1].len - v[i - 1].dist + v[i].dist + v[i].len;
sum2 = sum + v[i].dist + v[i].len - v[i - 1].len - v[i - 1].dist;
sum = max (sum1, sum2);
if (bestSum < sum)
bestSum = sum;
}
return bestSum;
}
int main(void){
freopen (IN, "r", stdin);
freopen (OUT, "w", stdout);
read ();
quickSort (1, n);
printf ("%d", best());
fclose (stdin);
fclose (stdout);
return 0;
}