def solve(): N, K = map(int, input().split()) max_heap = OrderHeap([], lambda key: -key) unique = set() cnt = defaultdict(int) max_heap.push(N) cnt[N] = 1 while len(max_heap) > 0: val = max_heap.pop() nr = cnt[val] if K <= nr: return (val - 1 - (val-1)//2, (val - 1) // 2) else: K -= nr unique.add(val) l = [(val-1)//2, val - 1 - (val-1)//2] for el in l: if el: if cnt[el] is 0: max_heap.push(el) cnt[el] += nr
def test_pop(self): heap = OrderHeap(reversed(ascii_uppercase), key=self.key) sorted_items = [] for c in reversed(ascii_uppercase): popped_item = heap.pop() heap.check() self.assertEqual(c, popped_item) sorted_items.append(popped_item) self.assertSequenceEqual(list(reversed(ascii_uppercase)), sorted_items) self.assertSetEqual(set(), set(heap))
def test_pop(self): heap = OrderHeap(reversed(ascii_uppercase), key=self.key) wanted = set(ascii_uppercase) not_wanted = set() sorted_items = [] for c in reversed(ascii_uppercase): self.assertEqual(c, heap.pop()) wanted.remove(c) not_wanted.add(c) self.assertHeap(wanted, not_wanted, heap) sorted_items.append(c) self.assertSequenceEqual(list(reversed(ascii_uppercase)), sorted_items) self.assertHeap([], ascii_uppercase, heap)