Skip to main content
Back to problems
#2530
Medium Algorithms

Maximal score after applying k operations

Array Greedy Heap (Priority Queue)
64.0% acceptance
Feb 25, 2026
878
52
You are given a 0-indexed integer array nums and an integer k. You have a starting score of 0. In one operation: choose an index i such that 0 <= i < nums.length, increase your score by nums[i], and replace nums[i] with ceil(nums[i] / 3). Return the maximum possible score you can attain after applying exactly k operations. The ceiling function ceil(val) is the least integer greater than or equal to val.

Solution

Rust
Time O(n log n)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn max_kelements(nums: Vec<i32>, k: i32) -> i64 {
    use std::collections::BinaryHeap;
    let mut heap: BinaryHeap<i32> = nums.into_iter().collect();
    let mut score = 0i64;
    for _ in 0..k {
      if let Some(max) = heap.pop() {
        score += max as i64;
        heap.push((max + 2) / 3); // ceil(max / 3)
      }
    }
    score
  }
}