Pagini recente » Cod sursa (job #2729434) | Cod sursa (job #2920742) | Cod sursa (job #1910803) | Cod sursa (job #3030777) | Cod sursa (job #68481)
Cod sursa(job #68481)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define nmax 50000
FILE *in = fopen("orase.in","r"), *out = fopen("orase.out","w");
struct orase
{
int d, l;
};
int m, n;
orase a[nmax];
int rez;
void read()
{
fscanf(in, "%d %d", &m, &n);
for ( int i = 0; i < n; ++i )
fscanf(in, "%d %d", &a[i].d, &a[i].l);
}
bool operator<(const orase &x, const orase &y)
{
return x.d < y.d;
}
int main()
{
read();
std::sort(a, a+n);
int comp = 0;
for ( int i = 1; i < n; ++i )
{
if ( a[i].l + a[comp].l + (a[i].d - a[comp].d) > rez )
rez = a[i].l + a[comp].l + (a[i].d - a[comp].d);
if ( a[comp].l + a[comp].d <= a[i].l )
comp = i;
}
comp = n-1;
for ( int i = n-2; i != -1; --i )
{
if ( a[i].l + a[comp].l + (a[i].d - a[comp].d) > rez )
rez = a[i].l + a[comp].l + (a[i].d - a[comp].d);
if ( a[comp].l < a[i].l + (m - a[i].d) )
comp = i;
}
fprintf(out, "%d\n", rez);
return 0;
}