Submission #895955

#TimeUsernameProblemLanguageResultExecution timeMemory
895955omsincoconutPotatoes and fertilizers (LMIO19_bulves)C++17
0 / 100
3 ms2652 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...