Pagini recente » Cod sursa (job #484897) | Cod sursa (job #2721163) | Cod sursa (job #126561) | Cod sursa (job #2260661) | Cod sursa (job #2447434)
#include <algorithm>
#include <fstream>
#include <cmath>
using namespace std;
size_t N, M;
ifstream fin("orase.in");
ofstream fout("orase.out");
struct Oras{
size_t d, l;
static size_t distance(Oras const& A, Oras const& B){
if(A.d >= B.d) return A.l + B.l + A.d - B.d;
else return A.l + B.l + B.d - A.d;
}
friend void operator >>(ifstream& in, Oras& O){
in >> O.d >> O.l;
}
inline bool operator > (Oras const& O){
return l > O.l + abs(d - O.d);
}
void operator = (Oras const& O){
l = O.l;
d = O.d;
}
};
Oras v[50001];
int main()
{
fin >> M >> N;
for(size_t i = 1; i <= N; i++)
fin >> v[i];
sort(v + 1, v + N + 1, [](Oras& A, Oras& B){return A.d < B.d;});
size_t best_first{1}, best_last{N};
for(size_t i = 2; i < N; i++){
if(v[i] > v[best_first]) best_first = i;
}
for(size_t i = N - 1; i > best_first; i--){
if(v[i] > v[best_last]) best_last = i;
}
fout << Oras::distance(v[best_first], v[best_last]);
}