Submission #895954

#TimeUsernameProblemLanguageResultExecution timeMemory
895954omsincoconutPotatoes and fertilizers (LMIO19_bulves)C++17
0 / 100
2 ms2648 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long int lli;
typedef long double ld;
typedef pair<ld, ld> pld;
typedef pair<lli, lli> pll;
#define mp(x, y) make_pair(x, y)

const lli MAXN = 5e5+5;

lli N;
lli a[MAXN], b[MAXN];

int main() {
    //ios_base::sync_with_stdio(false);
    //cin.tie(NULL);

    cin >> N;
    for (lli i = 0; i < N; i++) cin >> a[i] >> b[i];
    priority_queue<pll> fpos, bpos;
    fpos.emplace(-1e9, 0);
    bpos.emplace(-1e9, 0);
    for (lli i = 0; i < N; i++) {
        if (a[i] >= b[i]) {
            a[i] -= b[i];
            b[i] = 0;
            fpos.emplace(-i, a[i]);
        } else {
            b[i] -= a[i];
            a[i] = 0;
        }
    }

    lli ans = 0;
    for (lli i = 0; i < N; i++) {
        while (-fpos.top().first <= i) {
            bpos.emplace(-fpos.top().first, fpos.top().second);
            fpos.pop();
        }
        while (b[i] > 0) {
            lli fp = -fpos.top().first, bp = bpos.top().first;
            lli fd = fp - i, bd = i - bp;
            if (bd <= fd) {
                lli vl = bpos.top().second;
                if (vl <= b[i]) {
                    ans += bd*vl;
                    b[i] -= vl;
                    bpos.pop();
                } else {
                    ans += bd*b[i];
                    vl -= b[i];
                    b[i] = 0;
                    pll tmp = mp(bp, vl);
                    bpos.pop();
                    bpos.push(tmp);
                }
            } else {
                lli vl = fpos.top().second;
                if (vl <= b[i]) {
                    ans += fd*vl;
                    b[i] -= vl;
                    fpos.pop();
                } else {
                    ans += fd*b[i];
                    vl -= b[i];
                    b[i] = 0;
                    pll tmp = mp(-fp, vl);
                    fpos.pop();
                    fpos.push(tmp);
                }
            }
        }
    }

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...