3296. 移山所需的最少秒数

func minNumberOfSeconds(mountainHeight int, workerTimes []int) int64 {
l, r := 0, slices.Max(workerTimes) * mountainHeight * (mountainHeight + 1) / 2
for l <= r {
mid := l + (r - l) / 2
if check(mountainHeight, mid, workerTimes) {
r = mid - 1
} else {
l = mid + 1
}
}
return int64(r + 1)
}
func check(h, t int, workers []int) bool {
var cnt int
for _, worker := range workers {
l, r := 0, h
for l <= r {
mid := l + (r - l) / 2
cost := worker * mid * (mid + 1) / 2
if cost <= t {
l = mid + 1
} else {
r = mid - 1
}
}
cnt += (l - 1)
}
return cnt >= h
}