# Maximal score after applying k operations

January 9, 2023

heapProblem URL: Maximal score after applying k operations

We will use a heap to keep track of the maximum score. We will pop the maximum score from the heap and apply the operations to the popped score. We will push the new scores to the heap. We will repeat this process until we have applied all the operations.

```
class Solution:
def maxKelements(self, nums: List[int], k: int) -> int:
nums = [-n for n in nums]
heapq.heapify(nums)
res = 0
for _ in range(k):
num = -1 * heapq.heappop(nums)
res += num
heapq.heappush(nums, -1 * math.ceil(num/3))
return res
```

Time complexity: `O(klog(n))`

Space complexity: `O(n)`