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;
}