Beispiel #1
0
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
Beispiel #2
0
 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))
Beispiel #3
0
 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)
Beispiel #4
0
 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)