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_push(self): heap = OrderHeap([], key=self.key) wanted = set() not_wanted = set(ascii_uppercase) for c in reversed(ascii_uppercase): heap.push(c) wanted.add(c) not_wanted.remove(c) self.assertHeap(wanted, not_wanted, heap) self.assertHeap(ascii_uppercase, [], heap)
def test_push(self): heap = OrderHeap([], key=self.key) for c in reversed(ascii_uppercase): heap.push(c) heap.check() self.assertSetEqual(set(ascii_uppercase), set(heap))