不小于某数的第一个元素
def binary_search_notlessthan_first(arr, target):
low = 0
high = len(arr)-1
res = -1
while low <= high:
mid = (low+high)//2
if target <= arr[mid]:
res = mid
high = mid-1
else:
low = mid+1
return res
不大于某数的最后一个元素
def binary_search_notgreaterthan_last(arr, target):
low = 0
high = len(arr)-1
res = -1
while low <= high:
mid = (low + high) // 2
if arr[mid] <= target:
res = mid
low = mid + 1
else:
high = mid - 1
return res