int greedyWithHeap(List<Item> items) {
PriorityQueue<Item> heap = new PriorityQueue<>(this::priority);
int answer = initial();
for (Item item : items) {
heap.add(item);
while (!heap.isEmpty() && invalid(heap.peek())) heap.remove();
answer = use(answer, heap.peek());
}
return answer;
}
def greedy_with_heap(items) -> int:
heap = []
answer = initial()
for item in items:
heappush(heap, ranked(item))
while heap and invalid(heap[0]):
heappop(heap)
answer = use(answer, heap[0])
return answer
def greedyWithHeap(items: Iterable[Item]): Int =
val heap = scala.collection.mutable.PriorityQueue[Item]()(priority)
var answer = initial()
for item <- items do
heap.enqueue(item)
while heap.nonEmpty && invalid(heap.head) do heap.dequeue()
answer = use(answer, heap.head)
answer
int greedyWithHeap(const std::vector<Item>& items) {
std::priority_queue<Item, std::vector<Item>, Priority> heap;
int answer = initial();
for (const Item& item : items) {
heap.push(item);
while (!heap.empty() && invalid(heap.top())) heap.pop();
answer = use(answer, heap.top());
}
return answer;
}