Cod sursa(job #1845089)

Utilizator zanescucristianZanescu Cristian zanescucristian Data 10 ianuarie 2017 20:48:43
Problema Orase Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <stdlib.h>
#include <fstream>
#include <map>
using namespace std;

#define MAX_ORASE   50000

int main()
{
    int lngStradaPrinc,nrOrase,d=0,lungimeMaxima=0;
    int i,li,di;
    ifstream in ("orase.in");
    ofstream out ("orase.out");
    in >> lngStradaPrinc >> nrOrase;

    if (nrOrase <= MAX_ORASE)
    {
        map<int,int> tabel;
        pair< map<int,int>::iterator, bool > res;
        for (i = 0; i < nrOrase; ++i)
        {
            in >> di >> li;
            res = tabel.insert( pair<int,int>( di, li) );
            if (!res.second)   // exista deja
            {
                d = res.first->second;
                if (d < li)
                {
                    d += li;
                    if (lungimeMaxima < d) lungimeMaxima = d;
                    res.first->second = li;
                }
            }
        }

        int util, max_util;
        map<int,int>::iterator it = tabel.begin();
        if (it != tabel.end())
        {
            max_util = it->second - it->first;
            ++it;
        }
        for ( ; it != tabel.end(); ++it)
        {
            di = it->first;
            li = it->second;
            d = li + di + max_util;
            if (lungimeMaxima < d) lungimeMaxima = d;
            util = li - di;
            if (max_util < util) max_util = util;
        }
        out<<lungimeMaxima;
    }
    else
    {
        out<<"Nr orase prea mare";   // error message
    }
    return 0;
}