除2!
貪心+堆
讓偶數入堆
注意點:
1.判斷堆是否為空再進行操作
2. 為了防止超時,我們采取先求和的方式,后面調整之后再減掉,可以節省一次遍歷的時間。
3.注意數據范圍,要用long long
#include<iostream>
#include<queue>using namespace std;priority_queue<long long> pq;int main()
{int n = 0;cin >> n;long long k = 0;cin >> k;long long sum = 0;for (int i = 0; i < n; i++){long long temp = 0;cin >> temp;sum += temp;if(temp % 2 == 0){pq.push(temp);}}for (long long i = 0; i < k; i++){if(pq.empty()){break;}long long temp = pq.top() / 2;pq.pop();sum-=temp;if(temp % 2 == 0){pq.push(temp);}}cout << sum;return 0;
}