Cod sursa(job #1699831)

Utilizator andreipurdilaAndrei Purdila andreipurdila Data 8 mai 2016 17:22:19
Problema Orase Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <chrono>
#include <vector>

using namespace std;
using namespace std::chrono;

#define M 1000001

pair<int,int> roads[M];

int main() {
    ifstream in("orase.in");
    ofstream out("orase.out");

    int m, n;
    in>>m>>n;

    int li, di;
    for (int i = 0; i < n; ++i) {
        in>>di>>li;
        if (roads[di].first < li ) {
            int aux = roads[di].first;
            roads[di].first = li;
            roads[di].second = aux;
        } else if (roads[di].second < li) {
            roads[di].second = li;
        }
    }

    
    long maxDist;
    long result = -1;
    int i;
    for (i = 0; i <= m; ++i) {
        if (roads[i].first + roads[i].second > result) {
            result = roads[i].first + roads[i].second;
        }
        if ( roads[i].first > 0) {
            maxDist = i + roads[i].first;
            if (maxDist > result) {
                result = maxDist;
            }
            break;
        }
    }

    for (i = i + 1; i <= m; ++i) {
        maxDist++;
        if (roads[i].first + roads[i].second > result) {
            result = roads[i].first + roads[i].second;
        }
        if ( roads[i].first > 0 ) {
            if (roads[i].first + maxDist > result) {
                result = roads[i].first + maxDist;
            }
            if (roads[i].first > maxDist) {
                maxDist = roads[i].first;
            }
        }
    }
    out<<result;
    out.close();
}