답안 #895954

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
895954 2023-12-31T08:10:30 Z omsincoconut Potatoes and fertilizers (LMIO19_bulves) C++17
0 / 100
2 ms 2648 KB
#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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 2 ms 2648 KB Output is correct
3 Incorrect 2 ms 2500 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 2 ms 2648 KB Output is correct
3 Incorrect 2 ms 2500 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 2 ms 2648 KB Output is correct
3 Correct 1 ms 2392 KB Output is correct
4 Incorrect 1 ms 2396 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 2 ms 2648 KB Output is correct
3 Incorrect 2 ms 2500 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 2 ms 2648 KB Output is correct
3 Incorrect 2 ms 2500 KB Output isn't correct
4 Halted 0 ms 0 KB -