제출 #532409

#제출 시각아이디문제언어결과실행 시간메모리
532409Alex_tz307Garage (IOI09_garage)C++17
100 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; void testCase() { int n, m; cin >> n >> m; vector<int> a(n + 1); for (int i = 1; i <= n; ++i) { cin >> a[i]; } vector<int> w(m + 1); for (int i = 1; i <= m; ++i) { cin >> w[i]; } priority_queue<int, vector<int>, greater<int>> pq; for (int i = 1; i <= n; ++i) { pq.emplace(i); } queue<int> q; vector<int> slot(m + 1); vector<bool> del(m + 1); int ans = 0; for (int i = 1; i <= 2 * m; ++i) { int x; cin >> x; if (x > 0) { if (pq.empty()) { q.emplace(x); } else { slot[x] = pq.top(); pq.pop(); ans += w[x] * a[slot[x]]; } } else { x = -x; if (slot[x] == 0) { del[x] = true; } else { pq.emplace(slot[x]); while (!q.empty() && !pq.empty()) { while (!q.empty() && del[q.front()]) { q.pop(); } if (!q.empty()) { slot[q.front()] = pq.top(); pq.pop(); ans += w[q.front()] * a[slot[q.front()]]; q.pop(); } } } } } cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int tests = 1; for (int tc = 0; tc < tests; ++tc) { testCase(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...