Cod sursa(job #1699793)

Utilizator andreipurdilaAndrei Purdila andreipurdila Data 8 mai 2016 16:16:00
Problema Orase Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 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;
        }
    }


    for (int i = 0; i <=m; ++i) {
        cout<<roads[i].first << " "<<roads[i].second<<"\n";
    }

    int maxDist;
    int 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();
}