#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll f(vector<ll>& pages, vector<ll>& threshold) {
int n = pages.size();
map<int, vector<ll>> mp;
for (int i = 0; i < n; ++i) {
mp[threshold[i]].push_back(pages[i]);
}
for (auto& [_, v] : mp) sort(v.begin(), v.end());
ll ans = 0;
priority_queue<ll, vector<ll>, greater<ll>> picked_vals;
for (auto& [x, v] : mp) {
// always pick the best x - picked_vals.size() vals from here
vector<ll> new_vals;
for (int i = 0; i < x - (int) picked_vals.size() && !v.empty(); ++i) {
new_vals.push_back(v.back());
v.pop_back();
}
// can always replace an existing pick with a new val
while (!v.empty() && !picked_vals.empty() && v.back() > picked_vals.top()) {
ans += v.back() - picked_vals.top();
picked_vals.pop();
picked_vals.push(v.back());
v.pop_back();
}
for (ll val : new_vals) {
picked_vals.push(val);
ans += val;
}
}
return ans;
}
int main() {
vector<ll> pages{1000, 0, 0, 0,10,20,15,5,2, 3, 10, 100};
vector<ll> threshold{3,3,3,3,2,2,2,2,1,1,1, 1};
cout << f(pages, threshold);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmxsIGYodmVjdG9yPGxsPiYgcGFnZXMsIHZlY3RvcjxsbD4mIHRocmVzaG9sZCkgewogICAgaW50IG4gPSBwYWdlcy5zaXplKCk7CiAgICBtYXA8aW50LCB2ZWN0b3I8bGw+PiBtcDsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBtcFt0aHJlc2hvbGRbaV1dLnB1c2hfYmFjayhwYWdlc1tpXSk7CiAgICB9CiAgICAKICAgIGZvciAoYXV0byYgW18sIHZdIDogbXApIHNvcnQodi5iZWdpbigpLCB2LmVuZCgpKTsKICAgICAgICAKICAgIGxsIGFucyA9IDA7CiAgICBwcmlvcml0eV9xdWV1ZTxsbCwgdmVjdG9yPGxsPiwgZ3JlYXRlcjxsbD4+IHBpY2tlZF92YWxzOwogICAgZm9yIChhdXRvJiBbeCwgdl0gOiBtcCkgewogICAgICAgIC8vIGFsd2F5cyBwaWNrIHRoZSBiZXN0IHggLSBwaWNrZWRfdmFscy5zaXplKCkgdmFscyBmcm9tIGhlcmUKICAgICAgICB2ZWN0b3I8bGw+IG5ld192YWxzOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeCAtIChpbnQpIHBpY2tlZF92YWxzLnNpemUoKSAmJiAhdi5lbXB0eSgpOyArK2kpIHsKICAgICAgICAgICAgbmV3X3ZhbHMucHVzaF9iYWNrKHYuYmFjaygpKTsKICAgICAgICAgICAgdi5wb3BfYmFjaygpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBjYW4gYWx3YXlzIHJlcGxhY2UgYW4gZXhpc3RpbmcgcGljayB3aXRoIGEgbmV3IHZhbAogICAgICAgIHdoaWxlICghdi5lbXB0eSgpICYmICFwaWNrZWRfdmFscy5lbXB0eSgpICYmIHYuYmFjaygpID4gcGlja2VkX3ZhbHMudG9wKCkpIHsKICAgICAgICAgICAgYW5zICs9IHYuYmFjaygpIC0gcGlja2VkX3ZhbHMudG9wKCk7CiAgICAgICAgICAgIHBpY2tlZF92YWxzLnBvcCgpOwogICAgICAgICAgICBwaWNrZWRfdmFscy5wdXNoKHYuYmFjaygpKTsKICAgICAgICAgICAgdi5wb3BfYmFjaygpOwogICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIGZvciAobGwgdmFsIDogbmV3X3ZhbHMpIHsKICAgICAgICAgICAgcGlja2VkX3ZhbHMucHVzaCh2YWwpOwogICAgICAgICAgICBhbnMgKz0gdmFsOwogICAgICAgIH0KICAgICAgICAKICAgIH0KICAgIAogICAgcmV0dXJuIGFuczsKfQoKCmludCBtYWluKCkgewogICAgCiAgICB2ZWN0b3I8bGw+IHBhZ2VzezEwMDAsIDAsIDAsIDAsMTAsMjAsMTUsNSwyLCAzLCAxMCwgMTAwfTsKICAgIHZlY3RvcjxsbD4gdGhyZXNob2xkezMsMywzLDMsMiwyLDIsMiwxLDEsMSwgMX07CiAgICAKICAgIGNvdXQgPDwgZihwYWdlcywgdGhyZXNob2xkKTsKICAgIAogICAgcmV0dXJuIDA7Cn0=