제출 #587989

#제출 시각아이디문제언어결과실행 시간메모리
587989MohamedFaresNebiliGarage (IOI09_garage)C++14
100 / 100
1 ms388 KiB
#include <bits/stdc++.h>
/// #pragma GCC optimize ("Ofast")
/// #pragma GCC target ("avx2")
/// #pragma GCC optimize("unroll-loops")

        using namespace std;

        using ll = long long;
        using ii = pair<ll, ll>;
        using vi = vector<int>;

        #define ff first
        #define ss second
        #define pb push_back
        #define all(x) (x).begin(), (x).end()
        #define lb lower_bound
        #define int ll

        const int MOD = 1000 * 1000 * 1000 + 7;

		int32_t main() {
            ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
            int N, M; cin >> N >> M; int R[N], W[M]; bool leave[M];
            queue<int> Q; int A[N], B[M]; int res = 0;
            for(int l = 0; l < N; l++)
                cin >> R[l], A[l] = -1;
            for(int l = 0; l < M; l++)
                cin >> W[l], B[l] = -1, leave[l] = 0;
            for(int _ = 0; _ < 2 * M; _++) {
                int U; cin >> U;
                if(U > 0) { U--; Q.push(U); }
                else {
                    U++; U = -U; leave[U] = 1;
                    if(B[U] == -1) continue;
                    A[B[U]] = -1; B[U] = -1;
                }
                while(!Q.empty()) {
                    int V = Q.front(); bool ok = 0;
                    if(leave[V]) { Q.pop(); continue; }
                    for(int l = 0; l < N; l++) {
                        if(A[l] != -1) continue;
                        A[l] = V, B[V] = l;
                        ok = 1; res += R[l] * W[V];
                        break;
                    }
                    if(ok) Q.pop();
                    else break;
                }
            }
            cout << res << "\n";
            return 0;
		}


#Verdict Execution timeMemoryGrader output
Fetching results...