Submission #1198543

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

typedef long long ll;
#define FOR(i,N) for(ll i = 0; i < N; i++)
#define all(x) (x).begin(), (x).end()
#define F first 
#define S second


signed main() {
    cin.tie(0); ios::sync_with_stdio(false);
    int N, M;
    cin >> N >> M;

    vector<int> R(N);
    vector<int> W(M);
    FOR(i,N) cin >> R[i];
    FOR(i,M) cin >> W[i];

    priority_queue<int, vector<int>, greater<int>> available;
    FOR(i,N) available.push(i);

    queue<int> wait;
    map<int,int> park;

    int res = 0;
    FOR(i, 2*M) {
        int c;
        cin >> c;
        if (c < 0) {
            available.push(park[-(c)]);
            while (available.size() && wait.size()) {
                park[wait.front()] = available.top();
                res += W[wait.front() - 1] * R[available.top()];
                wait.pop();
                available.pop();
            }
        } else {
            wait.push(c);
            while (available.size() && wait.size()) {
                park[wait.front()] = available.top();
                res += W[wait.front() - 1] * R[available.top()];
                wait.pop();
                available.pop();
            }
        }
    }
    cout << res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...