Submission #1158614

#TimeUsernameProblemLanguageResultExecution timeMemory
1158614HakunaArt Exhibition (JOI18_art)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h>
using namespace std;

int n;
pair<long long, long long> p[(int)5e5 + 10];
long long pref[(int) 5e5 + 10];

pair<long long, long long> check(long long m) {
    int l = 1;
    long long ans = 0;
    long long sz = 0;
    for (int i = 1; i <= n; i++) {
        while (p[i].first - p[l].first > m) l++;
        if (pref[i] - pref[l - 1] > ans) {
            ans = pref[i] - pref[l - 1];
            sz = p[i].first - p[l].first;
        }
    }
    return {ans, sz};
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> p[i].first >> p[i].second;
    }
    sort(p + 1, p + n + 1);
    for (int i = 1; i <= n; i++) {
        pref[i] = pref[i - 1] + p[i].second;
    }
    
    long long l = 1 , r = 1e15;
    for (int j = 1; j <= 100; j++) {
        long long m1 = l + (r - l) / 3;
        long long m2 = r - (r - l) / 3;
        
        if (auto r1 = check(m1), r2 = check(m2); r1.first - m1 > r2.first - m2) {
            r = m2;
        } else {
            l = m1;
        }
    }
    
    long long ans = 0;
    for (long long j = l; j <= r; j++) {
        auto res = check(j);
        ans = max(ans, res.first - res.second);
    }
    cout << ans;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...