Pagini recente » Cod sursa (job #2827324) | Cod sursa (job #2170215) | Cod sursa (job #3184114) | Cod sursa (job #1104126) | Cod sursa (job #1699837)
#include <iostream>
#include <fstream>
using namespace std;
#define M 1000001
pair<long,long> roads[M];
int main() {
ifstream in("orase.in");
ofstream out("orase.out");
long m, n;
in>>m>>n;
long li, di;
for (int i = 0; i < n; ++i) {
in>>di>>li;
if (roads[di].first < li ) {
long 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;
long 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();
}