一种贯彻二分的神奇写法
查看原帖
一种贯彻二分的神奇写法
804343
MesyGolve楼主2024/10/14 16:47
def binary_search(arr, a):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == a:
            return mid
        elif arr[mid] < a:
            left = mid + 1
        else:
            right = mid - 1
    return left

def revenue_statistics(arr, a):
    count = 0
    if arr:
        aim = binary_search(arr, a)
        right_value = arr[aim] if aim < len(arr) else None
        left_value = arr[aim - 1] if aim > 0 else None
        
        if right_value is not None and left_value is not None:
            count += min(abs(a - right_value), abs(a - left_value))
        elif right_value is not None:
            count += abs(a - right_value)
        elif left_value is not None:
            count += abs(a - left_value)
    else:
        count += a
        
    return count

if __name__ == '__main__':
    n = int(input())
    arr = []
    ans = 0
    for _ in range(n):
        a = int(input())
        ans += revenue_statistics(arr, a)
        insert_pos = binary_search(arr, a)
        arr.insert(insert_pos, a)
    print(ans)

2024/10/14 16:47
加载中...