제출 #1224833

#제출 시각아이디문제언어결과실행 시간메모리
1224833santi3223Garage (IOI09_garage)C++20
100 / 100
1 ms328 KiB
#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 timeMemoryGrader output
Fetching results...