CCPC-Wannafly Winter Camp Day 5(Div 2,onsite)C Division貪欲


問題解
最大の数字を選択するたびに2を除いて最大収益を得る優先キューストレージを使用して最大値を選択した後、キューkの範囲に追加して1 e 9以内で最大1 e 5の数字を1 e 9まで追加するので、最大nlogv回で数値を0にすることができます.
ACコード
#include 
#include 
using namespace std;
typedef long long ll;

const int INF = 0x3f3f3f3f;

int main()
{
#ifdef LOCAL
	freopen("C:/input.txt", "r", stdin);
#endif
	int n, k, x;
	cin >> n >> k;
	priority_queue<int> pq;
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &x);
		pq.push(x);
	}
	while (pq.top() != 0 && k) //   0     
	{
		int f = pq.top();
		pq.pop();
		f /= 2;
		pq.push(f);
		k--;
	}
	ll ans = 0;
	while (!pq.empty())
		ans += pq.top(), pq.pop();
	cout << ans << endl;


	return 0;
}