#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main() {
int n;
cin >> n;
vector<long long> size(n), value(n);
for (int i = 0; i < n; ++i) {
cin >> size[i] >> value[i];
}
// Sort by size using indices
vector<int> idx(n);
for (int i = 0; i < n; ++i) idx[i] = i;
sort(idx.begin(), idx.end(), [&](int a, int b) {
return size[a] < size[b];
});
vector<long long> prefix_sums(n + 1, 0);
for (int i = 0; i < n; ++i) {
prefix_sums[i + 1] = prefix_sums[i] + value[idx[i]];
}
long long max_diff = LLONG_MIN;
long long prefix_min = LLONG_MAX;
for (int r = 0; r < n; ++r) {
long long curr_size = size[idx[r]];
long long curr_prefix = prefix_sums[r];
prefix_min = min(prefix_min, curr_prefix - curr_size);
max_diff = max(max_diff, (prefix_sums[r + 1] - curr_size) - prefix_min);
}
cout << max_diff << 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... |