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