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.093 second

Submitted On: 2025-06-15 14:54:09

#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;
	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)
		pq.push({a, b});

	for (auto e:B){
		if (sum <= 0ll || pq.empty()) break;
		sum += e;
		if (use.count(e) == 0){
			ump[e] += e;
			pq.push({e, ump[e]});
		}
		else 
			sum -= e;
		if (!pq.empty()){
			A T = pq.top();
			while (!pq.empty() && use.count(T.key) != 0){
				pq.pop();
				T = pq.top();
			}
			if (pq.empty()) break;
			T = pq.top(); pq.pop();
			sum -= T.val;
			use.insert(T.key);
		}
		ans.push_back(max(0ll, sum));
	}
	int k = ans.size(), m = B.size();
	while (k < m){
		ans.push_back(0ll);
		k++;
	}
    return ans;
}