제출 #632235

#제출 시각아이디문제언어결과실행 시간메모리
632235deviceGarage (IOI09_garage)C++17
100 / 100
2 ms340 KiB
#include <bits/stdc++.h>
using namespace std;
int main(){
	int n,m,ans = 0; cin >> n >> m;
	int space[n+1], car[m+1], curs[n+1] = {0}, curc[m+1] = {0}, available = n;
	queue<int> q;
	for(int i = 1; i <= n; i++) cin >> space[i];
	for(int i = 1; i <= m; i++) cin >> car[i];
	for(int i = 1; i <= 2*m; i++){
	    int cmd; cin >> cmd;
	    if(cmd > 0){
	        int ptr = 1;
	        while(curs[ptr] != 0 && ptr < n) ptr++;
	        if(ptr == n){
	            q.push(cmd);
	        }else{
	            curc[cmd] = ptr;
	            curs[ptr] = cmd;
	            ans += car[cmd] * space[ptr];
	            available--;
	        }
	    }else{
	        curs[curc[cmd*-1]] = 0;
	        curc[cmd*-1] = 0;
	        available++;
	    }
	    while(!q.empty()){
	        if(available == 0) break;
	        int ptr = 1;
	        while(curs[ptr] != 0 && ptr < n) ptr++;
	        curc[q.front()] = ptr;
	        curs[ptr] = q.front();
	        ans += car[q.front()] * space[ptr];
	        available--;
	        q.pop();
	    }
	}
	cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...