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