Submission #554376

#TimeUsernameProblemLanguageResultExecution timeMemory
554376alextodoranGarage (IOI09_garage)C++17
100 / 100
1 ms352 KiB
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int N, M;
    cin >> N >> M;
    int R[N];
    for (int i = 0; i < N; i++) {
        cin >> R[i];
    }
    int W[M];
    for (int j = 0; j < M; j++) {
        cin >> W[j];
    }
    int pos[M];
    set <int> sfree;
    queue <int> waiting;
    for (int i = 0; i < N; i++) {
        sfree.insert(i);
    }
    int answer = 0;
    for (int k = 0; k < M * 2; k++) {
        int j;
        cin >> j;
        if (j < 0) {
            j = -j; j--;
            sfree.insert(pos[j]);
        } else {
            j--;
            waiting.push(j);
        }
        if (sfree.empty() == false && waiting.empty() == false) {
            int j = waiting.front();
            waiting.pop();
            pos[j] = *sfree.begin();
            sfree.erase(sfree.begin());
            answer += R[pos[j]] * W[j];
        }
    }
    cout << answer << "\n";

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...