Cod sursa(job #990306)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 27 august 2013 21:21:57
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

#define Nmax 50005

int L[Nmax];
int D[Nmax];

int N, M;

void read()
{
    ifstream f("orase.in");

    f >> M >> N;

    for ( int i = 1; i <= N; ++i )
            f >> D[i] >> L[i];

    f.close();
}

void Qsort( int st, int dr )
{
    int i = st, j = dr, pivot = D[(i+j)/2];

    do
    {
        while( D[i] < pivot )   i++;
        while( D[j] > pivot )   j--;

        if ( i <= j )
        {
            swap( D[i], D[j] );
            swap( L[i], L[j] );

            i++;
            j--;
        }

    } while( i < j );

    if ( i < dr )   Qsort( i, dr );
    if ( st < j )   Qsort( st, j );
}

void solve()
{
    ofstream g("orase.out");

    int j = 1;
    int maxim = 0;
    int local = L[1] - D[1];

    for ( int i = 2; i <= N; ++i )
    {
        int dist = L[i] + D[i] + L[j] - D[j];

        if ( dist > maxim )
                maxim = dist;

        if ( L[i] - D[i] > local )
                j = i,
                local = L[i] - D[i];
    }

    g << maxim << "\n";

    g.close();
}

int main()
{
    read();
    Qsort( 1, N );
    solve();

    return 0;
}