Submission #1337837

#TimeUsernameProblemLanguageResultExecution timeMemory
1337837michael12Garage (IOI09_garage)C++20
5 / 100
0 ms344 KiB
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<stack>
#include<queue>
#include<string.h>
#include<array>
#include<algorithm>
#include<cmath>
using namespace std;
#define int long long
const int maxn = 5e5;
const int oo = 1e18;
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N, M;
    cin >> N >> M;
    vector<int> S(N + 1), W(M + 1), dep(2 * N + 1);
    for(int i = 1; i <= N; i++){
        cin >> S[i];
    }
    for(int i = 1; i <= M; i++){
        cin >> W[i];
    }
    for(int i = 1; i <= 2 * N; i++){
        cin >> dep[i];
    }
    multiset<int> st;
    for(int i = 1; i <= N; i++){
        st.insert(i);
    }
    vector<int> B(M);
    queue<int> pq;
    int cur = 0;
    for(int i = 1; i <= 2 * N; i++){
        if(dep[i] > 0){
           pq.push(dep[i]);
        }
        else{
            st.insert(B[-dep[i]]);
        }
        while(!st.empty() && !pq.empty()){
            int P = pq.front();
            pq.pop();
            int F = *st.begin();
            st.erase(st.begin());
            cur += S[F] * W[P];
            B[P] = F;
        }
        // if(!st.empty()){
        //     if(dep[i] >= 0){
        //         int P = pq.top();
        //         pq.pop();
        //         cur += st.begin() * W[P];
        //         st.erase(st.begin());
        //         B[dep[i]] = st.begin();
        //         pq.pop();
        //     }
        //     else{
        //         st.insert(B[-dep[i]]);
        //     }
        // }
        // else{
        //     if(dep[i] >= 0){
        //         pq.push(dep[i]);
        //     }
        //     else{
        //         st.insert(B[-dep[i]]);
        //     }
        // }
    }
    cout << cur;
   
        

    
}
#Verdict Execution timeMemoryGrader output
Fetching results...