1class Solution:2def findBestValue(self, arr: List[int], t: int) -> int:3def getsum(x):4s = 05for i in range(n):6if arr[i] > x:7s += x * (n - i)8break9else:10s += arr[i]11return s1213arr.sort()14n = len(arr)15l, r = 0, max(arr)16ans = [inf, inf]17while l <= r:18m = l + (r - l) // 219if abs(getsum(m) - t) <= ans[0]:20if abs(getsum(m) - t) == ans[0]:21ans[1] = min(m, ans[1])22else:23ans = [abs(getsum(m) - t), m]24if getsum(m) > t:25r = m - 126else:27l = m + 12829return ans[1]