Cod sursa(job #68089)

Utilizator cos_minBondane Cosmin cos_min Data 26 iunie 2007 14:01:02
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#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);
}