Pagini recente » Cod sursa (job #2731885) | Cod sursa (job #3173005) | Cod sursa (job #506712) | Cod sursa (job #2620768) | Cod sursa (job #68069)
Cod sursa(job #68069)
#include <stdio.h>
using namespace std;
#define in "orase.in"
#define out "orase.out"
#define dim 50001
int N, M;
int D1[dim], L1[dim];
int D2[dim], L2[dim];
void Qsort1(int,int);
void Qsort2(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", &D1[i], &L1[i]), D2[i] = D1[i], L2[i] = L1[i];
/* N*logN
int maxim = -1;
Qsort1(1,N); // dupa D
for ( int i = 1; i <= N/2; i++ )
{
if ( N-i+1 != i )
{
if ( maxim < L1[i] + L1[N-i+1] - D1[i] ) maxim = L1[i] + L1[N-i+1] + D1[N-i+1] - D1[i];
}
}
Qsort2(1,N);
int q;
for ( int i = 1; i <= N/2; i++ )
{
if ( N-i+1 != i )
{
if ( D2[i] < D2[N-i+1] ) q = D2[N-i+1]-D2[i];
else q = D2[i]-D2[N-i+1];
if ( maxim < L2[i] + L2[N-i+1] + q ) maxim = L2[i] + L2[N-i+1] + q;
}
}
*/
/* 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[N-i+1] ) q = D2[N-i+1]-D2[i];
else q = D2[i]-D2[N-i+1];
if ( maxim < L2[i] + L2[N-i+1] + q ) maxim = L2[i] + L2[N-i+1] + q;
}
printf("%d", maxim);
}
void Qsort1(int st, int dr)
{
int i = st-1;
int j = dr+1;
int pivotd = D1[st];
int pivotl = L1[st];
while ( i <= j )
{
do { i++; } while ( D1[i] < pivotd || ( D1[i] == pivotd && L1[i] < pivotl ) );
do { j--; } while ( D1[j] > pivotd || ( D1[j] == pivotd && L1[j] > pivotl ) );
if ( i <= j )
{
int aux = D1[i];
D1[i] = D1[j];
D1[j] = aux;
aux = L1[i];
L1[i] = L1[j];
L1[j] = aux;
}
}
if ( st < j ) Qsort1(st,j);
if ( i < dr ) Qsort1(i,dr);
}
void Qsort2(int st, int dr)
{
int i = st-1;
int j = dr+1;
int pivotd = D2[st];
int pivotl = L2[st];
while ( i <= j )
{
do { i++; } while ( L2[i] < pivotl || ( L2[i] == pivotl && D2[i] < pivotd ) );
do { j--; } while ( L2[j] > pivotl || ( L2[j] == pivotl && D2[j] > pivotd ) );
if ( i <= j )
{
int aux = D2[i];
D2[i] = D2[j];
D2[j] = aux;
aux = L2[i];
L2[i] = L2[j];
L2[j] = aux;
}
}
if ( st < j ) Qsort2(st,j);
if ( i < dr ) Qsort2(i,dr);
}