Pagini recente » Cod sursa (job #78045) | Cod sursa (job #594150) | Cod sursa (job #786572) | Cod sursa (job #1331625) | Cod sursa (job #68089)
Cod sursa(job #68089)
#include <stdio.h>
using namespace std;
#define in "orase.in"
#define out "orase.out"
#define dim 50001
int N, M;
int D[dim], L[dim], T[dim];
void Qsort(int,int);
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &M, &N);
for ( int i = 1; i <= N; i++ )
scanf("%d%d", &D[i], &L[i]);
Qsort(1,N);
T[1] = L[1]-D[1];
for ( int i = 2; i <= N; i++ )
{
if ( T[i-1] < L[i]-D[i] ) T[i] = L[i]-D[i];
else T[i] = T[i-1];
}
int maxim=-1;
for ( int i = 2; i <= N; i++ )
{
if ( L[i] + D[i] + T[i-1] > maxim ) maxim = L[i] + D[i] + T[i-1];
}
// N*N
/* int q, maxim=-1;
for ( int i = 1; i < N; i++ )
for ( int j = i+1; j <= N; j++ )
{
if ( D2[i] < D2[j] ) q = D2[j]-D2[i];
else q = D2[i]-D2[j];
if ( maxim < L2[i] + L2[j] + q ) maxim = L2[i] + L2[j] + q;
}
*/
printf("%d", maxim);
}
void Qsort(int st, int dr)
{
int i = st-1;
int j = dr+1;
int pivot = D[st], pivot2 = L[st];
while ( i <= j )
{
do { i++; } while ( D[i] < pivot || ( D[i] == pivot && L[i] < pivot2 ) );
do { j--; } while ( D[j] > pivot || ( D[j] == pivot && L[j] > pivot2 ) );
if ( i <= j )
{
int aux;
aux = D[i], D[i] = D[j], D[j] = aux;
aux = L[i], L[i] = L[j], L[j] = aux;
}
}
if ( st < j ) Qsort(st,j);
if ( i < dr ) Qsort(i,dr);
}