Submission
Status:
(PPPPPPPPPPPPPP)(PPPPPPPPPPP)(PPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPPPPPP)(TSSSSSSSSSSSSSSSSSSSSS)
Subtask/Task Score:
{5/5}{7/7}{8/8}{12/12}{16/16}{28/28}{0/24}
Score: 76
User: Dormon
Problemset: แคง (Kang)
Language: cpp
Time: 2.100 second
Submitted On: 2025-06-15 09:58:17
#include <vector>
#include <bits/stdc++.h>
std::vector<long long> capsize(std::vector<int> v, std::vector<int> B){
using namespace std;
using ll = long long;
vector<ll> ans;
struct A {
ll key, val;
bool operator < (const A &o) const {
if (val != o.val) return val < o.val;
return key < o.key;
}
};
multiset<A> ms;
unordered_map<ll, ll> ump;
unordered_set<ll> use;
ll sum = 0ll;
for (auto e:v){
ump[e] += e;
sum += e;
}
for (auto [a, b]:ump)
ms.insert({a, b});
for (auto e:B){
if (sum <= 0ll) break;
sum += e;
if (use.count(e) == 0){
if (ump[e] == 0)
ump[e] = e;
else {
ms.erase(ms.find({e, ump[e]}));
ump[e] += e;
}
ms.insert({e, ump[e]});
}
else
sum -= e;
if (!ms.empty()){
auto it = prev(ms.end());
sum -= it->val;
use.insert(it->key);
ms.erase(it);
}
ans.push_back(max(0ll, sum));
}
int k = ans.size(), m = B.size();
while (k < m){
ans.push_back(0ll);
k++;
}
return ans;
}