#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vb vector<bool>
#define pb push_back
#define ff(aa, bb, cc) for(ll aa = bb; aa < cc; aa++)
#define vl vector<ll>
#define pll pair<ll, ll>
#define fi first
#define se second
#define ed "\n"
#define all(aaa) aaa.begin(), aaa.end()
#define rall(aaa) aaa.rbegin(), aaa.rend()
int main(){
ll n, m;
cin >> n >> m;
vl s(n);
priority_queue<ll, vl, greater<ll>> available;
ff(i, 0, n){
available.push(i);
cin >> s[i];
}
vl w(m);
ff(i, 0, m){
cin >> w[i];
}
queue<ll> waitlist;
ll aaa = 2*m;
vl car_isin(m);
ll fin = 0;
while(aaa--){
ll car;
cin >> car;
bool irse = false;
if(car < 0){
irse = true;
}
car = abs(car);
car--;
if(!irse){
if(available.empty()){
waitlist.push(car);
}
else{
ll id = available.top();
fin += w[car]*s[id];
car_isin[car] = id;
available.pop();
}
}
else{
ll id = car_isin[car];
available.push(id);
if(!waitlist.empty()){
ll curid = available.top();
ll curcar = waitlist.front();
waitlist.pop();
fin += w[curcar]*s[curid];
car_isin[curcar] = curid;
available.pop();
}
}
}
cout << fin;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |