class Solution:
    def minSpeedOnTime(self, A: List[int], hour: float) -> int:
        """  tc O(Nlg(sumA))  sc O(1)
        note, except for last trip,  all the other trips takes ceiling hours to complete
        speed => sum(dis_i/speed) <= hours 
        
        ??? range of speed   hour >= 1 =>     max speed sum(dist) => [1,sum(dist)]
        
        !! edge case: when n-1 >= hour, return -1 
        """
        n = len(A)
        l,r = 1, 10**7+1
        #!!! important 
        if n-1 >= hour :
            return -1 
        def cnt_h(speed,A):
            h,n = 0,len(A)
            for i in range(n-1):
                h += ceil(A[i]/speed)
            h += A[-1]/speed
            return h 
        
        while l < r :
            mid = (l+r)//2 #>> 1 , speed is a int so //   l + (r-l+1)//2 -1  
            hrs = cnt_h(mid,A)
            if hrs > hour:  # speed is too slow 
                l = mid + 1#(l==mid)
            else:
                r = mid 
        return l #if cnt_h(l,A)<= hour else -1 
        # if h <= hour:
        #     return mid
        # # elif isOk(mid+1,hour,dist)<=hour:
        # #     return mid-1
        # else:
        #     return -1
        #return mid if (dis/mid) <= hour else -1