Submission #535013

#TimeUsernameProblemLanguageResultExecution timeMemory
535013christinelynnGarage (IOI09_garage)C++17
100 / 100
3 ms332 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll mod = 1e9 + 7;
#pragma GCC optimize("Ofast")
#define vi vector<int>
#define vll vector<ll>
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define fi first
#define sc second
#define endl '\n'
#define gl ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

int main()
{
  int n, m;
  cin >> n >> m;
  
  int r[n + 1], w[m + 1], p[m + 1];
  priority_queue<int, vector<int>, greater<int> > ada;
  queue<int> q;
  
  for(int i = 1; i <= n; i++) cin >> r[i];
  for(int i = 1; i <= m; i++) cin >> w[i];
  
  ll ans = 0;
  
  for(int i = 1; i <= n; i++) ada.push(i);
  for(int i = 1; i <= 2 * m; i++){
    int x;
    cin >> x;
    
    if(x > 0){
      if(ada.empty()) q.push(x);
      else{
        int pos = ada.top();
        ada.pop();
        
        ans += r[pos] * w[x];
        p[x] = pos;
      }
    }
    else{
      x *= -1;
      ada.push(p[x]);
      if(!q.empty()){
        int pake = q.front();
        int pos = ada.top();
        ada.pop();
        q.pop();
        
        ans += r[pos] * w[pake] * 1LL;
        p[pake] = pos;
      }
    }
  }
  
  cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...