제출 #787641

#제출 시각아이디문제언어결과실행 시간메모리
787641That_SalamanderArt Exhibition (JOI18_art)C++17
100 / 100
309 ms63948 KiB
#include <bits/stdc++.h>
#define int long long

#define FOR(var,bound) for(int var = 0; var < bound; var++)
#define FORB(var,lb,ub) for (int var = lb; var < ub; var++)
#define FORR(var,bound) for(int var = bound-1; var >= 0; var--)

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef pair<int, int> pii;

int n;
pii art[500000];
int prefixValue[500005], adjustedValue[500005], prefixAdjusted[500005];

int getValue(int l, int r) {
    int s = prefixValue[r+1] - prefixValue[l];
    return s - (art[r].first - art[l].first);
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> n;
    FOR(i, n) {
        cin >> art[i].first >> art[i].second;
    }

    sort(art, art + n);

    prefixValue[0] = 0;

    FOR(i, n) {
        prefixValue[i+1] = prefixValue[i] + art[i].second;
    }

    prefixAdjusted[0] = 0;
    set<pii> bruh;
    FOR (i, n) {
        if (i == 0) {
            adjustedValue[i] = art[i].second;
        } else {
            adjustedValue[i] = art[i].second - (art[i].first - art[i-1].first);
        }

        prefixAdjusted[i+1] = prefixAdjusted[i] + adjustedValue[i];
        bruh.insert({prefixAdjusted[i+1], i});
    }

    int res = 0;

    FOR(i, n) {
        auto mpos = *(--bruh.end());
        res = max(res, getValue(i, mpos.second));
        bruh.erase({prefixAdjusted[i+1], i});
    }

    cout << res << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...