Pagini recente » Cod sursa (job #1191270) | Cod sursa (job #1170677) | Cod sursa (job #261849) | Cod sursa (job #1695030) | Cod sursa (job #2110319)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("heavymetal.in");
ofstream out("heavymetal.out");
int n, d[100001], poz[100001];
pair <int, int> v[100001];
bool cond(int i, int j) {
return (v[i].second < v[j].second);
}
inline int lung(int k) {
return v[poz[k]].second - v[poz[k]].first;
}
int cautbin(int x) {
int pas = 1 << 17, r = 0;
while (pas != 0) {
if (r + pas <= n && v[poz[r + pas]].second <= x) {
r += pas;
}
pas >>= 1;
}
return r;
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++) {
in >> v[i].first >> v[i].second;
poz[i] = i;
}
sort(poz + 1, poz + n + 1, cond);
d[1] = lung(1);
for (int i = 2; i <= n; i++) {
d[i] = max(d[i - 1], d[cautbin(v[poz[i]].first)] + lung(i));
}
out << d[n];
}