Submission #1225053

#TimeUsernameProblemLanguageResultExecution timeMemory
1225053lukasuliashviliGarage (IOI09_garage)C++20
75 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fs first
#define sc second
#define pb push_back
#define rep(i,a,b) for(int i=a; i<=b; i++)
const int N=2000005;
int t[2005],w[2005],a[200];
signed main(){
    int n,m;
    cin>>n>>m;
    rep(i,1,n){
        cin>>a[i];
    }
    rep(i,1,m){
        cin>>w[i];
    }
    rep(i,1,2*m){
        cin>>t[i];
    }
    vector<int> fre(n+1);
    map<int,int> pos;
    queue<int> q;
    int ans=0;
    for(int i=1;i<=2*m;i++){
        if(t[i]<0){
            int car=-t[i];
            int p=pos[car];
            fre[p]=0;
            if(!q.empty()){
                int newcar=q.front();q.pop();
                fre[p]=1;
                pos[newcar]=p;
                ans+=a[p]*w[newcar];
            }
        }else{
            int car=t[i];
            bool placed=false;
            for(int j=1;j<=n;j++){
                if(fre[j]==0){
                    fre[j]=1;
                    pos[car]=j;
                    ans+=a[j]*w[car];
                    placed=true;
                    break;
                }
            }
            if(!placed){
                q.push(car);
            }
        }
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...