Pagini recente » Cod sursa (job #2047120) | Cod sursa (job #1971451) | Cod sursa (job #1066717) | Cod sursa (job #848191) | Cod sursa (job #97494)
Cod sursa(job #97494)
#include <stdio.h>
#define infile "orase.in"
#define outfile "orase.out"
#define nmax 50001
long n, m, i, j, last, rez, aux;
long d[nmax], l[nmax];
void readData();
void writeData();
void solve();
long divide(long,long);
void qSort(long,long);
int main()
{
readData();
solve();
writeData();
return 0;
}
void readData()
{
freopen(infile, "r", stdin);
scanf("%ld %ld\n", &m, &n);
for ( i=1; i<=n; i++ )
scanf("%ld %ld\n", &d[i], &l[i]);
}
void solve()
{
qSort(1,n);
last=1;
for ( i=2; i<=n; i++ )
{
if ( d[i]-d[last]+l[i]+l[j] > d[i]-d[i-1]+l[i]+l[i-1] )
{
aux=d[i]-d[last]+l[i]+l[j];
if (aux>rez) rez=aux;
}
else
{
aux=d[i]-d[i-1]+l[i]+l[i-1];
last=i-1;
if (aux>rez) rez=aux;
}
}
}
void writeData()
{
freopen(outfile, "w", stdout);
printf("%ld\n", rez);
fclose(stdout);
}
long divide(long p, long q)
{
long st=p, dr=q, x=d[p], y=l[p];
while (st < dr)
{
while ( st<dr && d[dr]>=x ) dr--;
d[st]=d[dr];
l[st]=l[dr];
while ( st<dr && d[st]<=x ) st++;
d[dr]=d[st];
l[dr]=l[st];
}
d[st]=x;
l[st]=y;
return st;
}
void qSort(long p, long q)
{
long m=divide(p,q);
if (m-1>p) qSort(p, m-1);
if (m+1<q) qSort(m+1, q);
}