我第一次就是自己实现堆的,这样每次增加还是要有线性复杂度,只能AC70%,这题每次循环复杂度只能是O(logn)。 我采用的方式是使用STL的优先级队列。 比较巧妙的思路是:对于第i天,队列中的元素都加上i*k才是每个元素的真实值。每天 要把最大元素的数量减半的话,就先把top弹出,再将((top+i*k)/2)+i*k加入优先级队列。这样的话还是维持着这个每个元素加上i*k是真实值的性质。 最后一一弹出所有元素求和得到sum,sum+m*n*k就算最终答案。AC