二分搜索(int类型) python版本

AcWing 789数的范围

https://www.acwing.com/problem/content/791/

n, q = map(int, input().split())
a = list(map(int, input().split()))


def binarySearchLeft(k, L, R):
    while L < R:
        mid = L + R >> 1
        if a[mid] >= k:
            R = mid
        else:
            L = mid + 1
    if a[L] != k:
        return -1
    else:
        return L


def binarySearchRight(k, L, R):
    while L < R:
        mid = L + R + 1 >> 1
        if a[mid] <= k:
            L = mid
        else:
            R = mid - 1
    if a[L] != k:
        return -1
    return L


while q:
    k = int(input())
    L = binarySearchLeft(k, 0, n - 1)
    R = binarySearchRight(k, 0, n - 1)
    print(L, R)
    q -= 1

猜你喜欢

转载自www.cnblogs.com/Chaosliang/p/12184970.html