Submission
Status:
(PPPPPPPPPPPPPP)(PPPPPPPPPPP)(PPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPPPPPP)(PPPPPPPPPPPPPPPPPPPPPP)
Subtask/Task Score:
{5/5}{7/7}{8/8}{12/12}{16/16}{28/28}{24/24}
Score: 100
User: Dormon
Problemset: แคง (Kang)
Language: cpp
Time: 1.836 second
Submitted On: 2025-06-15 14:57:13
#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;
}
};
priority_queue<A> pq;
unordered_map<ll, ll> ump;
ll sum = 0ll;
for (auto e:v){
ump[e] += e;
sum += e;
}
for (auto [a, b]:ump)
pq.push({a, b});
for (auto e:B){
if (sum <= 0ll || pq.empty()) break;
sum += e;
if (ump[e] != -1){
ump[e] += e;
pq.push({e, ump[e]});
}
else
sum -= e;
if (!pq.empty()){
A T = pq.top();
while (!pq.empty() && ump[T.key] == -1){
pq.pop();
T = pq.top();
}
if (pq.empty()) break;
T = pq.top(); pq.pop();
sum -= T.val;
ump[T.key] = -1;
}
ans.push_back(max(0ll, sum));
}
int k = ans.size(), m = B.size();
while (k < m){
ans.push_back(0ll);
k++;
}
return ans;
}