Submission #1222262

#TimeUsernameProblemLanguageResultExecution timeMemory
1222262overwatch9Bikeparking (EGOI24_bikeparking)C++20
9 / 100
226 ms37984 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
    int n;
    cin >> n;
    set <pair <ll, ll>> X, Y;
    for (int i = 0; i < n; i++) {
        int tp;
        cin >> tp;
        X.insert({i, tp});
    }
    for (int i = 0; i < n; i++) {
        int tp;
        cin >> tp;
        Y.insert({tp, -i});
    }

    ll ans = 0;

    set <pair <ll, ll>> todo;

    for (int i = 0; i < n; i++) {
        int y = Y.rbegin()->first;
        int id = -Y.rbegin()->second;
        Y.erase(--Y.end());
        while (y > 0) {
            auto it = X.lower_bound({id, 0});
            if (it == X.begin()) {
                if (y == 0)
                    break;
                todo.insert({y, -id});
                break;
            }

            it--;
            int x = it->second;
            int id2 = it->first;
            X.erase(it);
            int amt = min(x, y);
            ans += amt;
            x -= amt;
            y -= amt;

            if (x > 0) {
                X.insert({id2, x});
                // y = 0
                break;
            }

        }

    }

    for (auto i : todo) {
        int y = i.first;
        int id = i.second;
        auto it = X.lower_bound({id, 0});
        if (it->first != id)
            ans -= y;
    }

    cout << ans << '\n';

}
#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...