#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll LEN = 500005;
struct Sub {
ll left;
ll right;
ll full;
ll best;
Sub() {}
Sub(ll s) : Sub(s, s, s, s) {}
Sub(ll left, ll right, ll full, ll best) : left(left), right(right), full(full), best(best) {}
};
array<pair<ll, ll>, LEN> artworks;
array<ll, LEN> prefb;
Sub build(ll s, ll f) {
if (s == f) return Sub(artworks[s].second);
Sub l = build(s, (s+f)/2);
Sub r = build((s+f)/2+1, f);
Sub ret = Sub();
// left
// ) left.left , left.full + r.left
ret.left = max(l.left, l.full + r.left - (artworks[(s+f)/2+1].first - artworks[(s+f)/2].first));
ret.right = max(r.right, r.full + l.right - (artworks[(s+f)/2+1].first - artworks[(s+f)/2].first));
ret.full = prefb[f] - prefb[s-1] - (artworks[f].first - artworks[s].first);
ret.best = max({
l.best,
r.best,
l.right + r.left - (artworks[(s+f)/2+1].first - artworks[(s+f)/2].first)
});
return ret;
}
int main() {
// freopen("input.in", "r", stdin);
ll n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> artworks[i].first >> artworks[i].second;
}
sort(&artworks[1], &artworks[n+1]);
for (int i = 1; i <= n; i++) {
prefb[i] = prefb[i-1] + artworks[i].second;
}
cout << build(1, n).best << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |