def bisection_right(a, x):
lo = 0
hi = len(a)
while hi > lo:
mid = (hi+lo)//2
if a[mid] > x:
hi = mid
else: # x >= a[mid]
lo = mid + 1
return lo
def bisection_left(a, x):
lo = 0
hi = len(a)
while hi > lo:
mid = (hi+lo)//2
if x > a[mid]:
lo = mid + 1
else: # x <= a[mid]
hi = mid
return lo