Submission #1245603

#TimeUsernameProblemLanguageResultExecution timeMemory
1245603gmalex98Garage (IOI09_garage)C++20
100 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, res = 0;
    cin >> n >> m;

    vector<int> rates(n);
    for (int i = 0; i < n; ++i) cin >> rates[i];

    vector<int> weights(m);
    for (int i = 0; i < m; ++i) cin >> weights[i];

    priority_queue<int, vector<int>, greater<int>> free_spots;
    for (int i = 0; i < n; ++i) free_spots.push(i);

    queue<int> waiting;
    unordered_map<int, int> parked;

    for (int i = 0; i < 2 * m; ++i) {
        int x;
        cin >> x;
        if (x > 0) {
            x--; // 0-based
            if (!free_spots.empty()) {
                int spot = free_spots.top(); free_spots.pop();
                res += weights[x] * rates[spot];
                parked[x] = spot;
            } else {
                waiting.push(x);
            }
        } else {
            x = -x - 1;
            if (parked.find(x) == parked.end()) {
                continue; // skip auto koji nije parkiran
            }
            int spot = parked[x];
            parked.erase(x);
            if (!waiting.empty()) {
                int next = waiting.front(); waiting.pop();
                res += weights[next] * rates[spot];
                parked[next] = spot;
            } else {
                free_spots.push(spot);
            }
        }
    }

    cout << res << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...