#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
const ll MOD = 1e9 + 7;
ll n, m, k, a, b, c, d, x, y;
int main() {
ios::sync_with_stdio(false);
cout.tie(0); cin.tie(0);
cin >> n >> m;
vector<ll> parking(n);
vector<ll> weights(m);
for(int j = 0; j<n; j++) cin >> parking[j];
for(int j = 0; j<m; j++) cin >> weights[j];
// sort(parking.begin(), parking.end());
ll tt = 2*m;
ll totalEarnings = 0;
queue<ll> carqueue;
vector<bool> occupied(n, false);
vector<ll> parked(m, -1);
while(tt--) {
int inp; cin >> inp;
if(inp > 0) {
bool done = false;
for(int i = 0; i<n; i++) {
if(occupied[i] == false) {
occupied[i] = true;
parked[inp-1] = i+1;
done = true;
totalEarnings += weights[inp-1] * parking[i];
break;
}
}
if(done == false) {
carqueue.push(inp);
}
}
else {
inp = (-1)*(inp);
occupied[parked[inp-1]-1] = false;
if(carqueue.empty() == false) {
// cout << parked[inp-1]-1 << " " << weights[carqueue.front()-1] << " ";
totalEarnings += parking[parked[inp-1]-1] * weights[carqueue.front()-1];
occupied[parked[inp-1]-1] = true;
parked[carqueue.front()-1] = parked[inp-1];
carqueue.pop();
}
}
if(carqueue.empty() == false) cout << carqueue.front() << " ";
// cout << totalEarnings << "\n";
}
cout << totalEarnings;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |