제출 #392266

#제출 시각아이디문제언어결과실행 시간메모리
392266nishuzGarage (IOI09_garage)C++17
5 / 100
2 ms464 KiB
// #pragma GCC optimize("Ofast,unroll-loops")
// #pragma GCC target("avx,avx2,sse,sse2")
 
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace __gnu_pbds;
using namespace std;
 
#define ll long long
#define ld long double
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define eb emplace_back
#define F first
#define S second
#define mp make_pair
#define random mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
 
template <typename T> using oset = tree <pair <T, T>, null_type, less <pair <T, T>>, rb_tree_tag, tree_order_statistics_node_update>;

template <typename Container>
void Print(Container& container, int starting) {
    auto Start = container.begin(), End = container.end();
    while (Start != End) cout << *(Start++) << " ";
    cout << '\n';
}
 
template <typename T>
void print(T&& t) {cout << t << '\n';}
 
template <typename T, typename... Args>
void print(T&& t, Args&&... args) {
    cout << t << " ";
    print(forward<Args>(args)...);
}

inline void solve() {
    int n, m, ans = 0;
    cin >> n >> m;
    vector <int> s(n), w(m), p(n);
    set <int> spots;
    for (int i = 0; i < n; ++i) {
        cin >> s[i];
        spots.insert(i);
    }
    for (int i = 0; i < m; ++i) cin >> w[i];
    queue <int> q;
    for (int i = 0; i < 2 * m; ++i) {
        int x;
        cin >> x;
        if (x > 0) {
            q.emplace(x);
        } else {
            x *= -1;
            spots.insert(p[x - 1]);
            p[x - 1] = 0;
        }
        while (!q.empty() && !spots.empty()) {
            int cur = q.front();
            auto place = spots.begin();
            spots.erase(place);
            p[cur - 1] = *place;
            ans += (w[cur - 1] * s[*place]);
            q.pop();
        }
    }
    print(ans);
}
 
int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T = 1;
    // cin >> T;
    for (int test = 1; test <= T; ++test) {
        // cout << "Case #" << test << ": ";
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...