// ── ABOUT ────────────────────────────────────────────────────────
// Max heap by default → top() always gives largest
// insert O(log n)
// delete O(log n) → can only delete top()
// top O(1)
// ── MAX HEAP (default) ───────────────────────────────────────────
priority_queue<int> pq; // max heap
pq.push(2);
pq.push(1);
pq.push(3);
pq.push(3);
cout << pq.top(); // 3
pq.pop();
cout << pq.top(); // 3 (duplicate)
// ── MIN HEAP ─────────────────────────────────────────────────────
priority_queue<int, vector<int>, greater<int>> pqm; // min heap
pqm.push(2);
pqm.push(1);
pqm.push(3);
cout << pqm.top(); // 1
// ── DRAIN ────────────────────────────────────────────────────────
cout << "size: " << pqm.size(); // O(1)
while (!pqm.empty()) {
cout << pqm.top() << " "; // 1 2 3
pqm.pop();
}
// ── MIN HEAP TRICK (when you only have max heap) ──────────────────
// push negative values → negate when reading
pq.push(-arr[i]);
int val = -pq.top();