题目描述
牛牛有n堆石子堆,第i堆一共有ai个石子。
牛牛可以对任意一堆石子数量大于1的石子堆进行分裂操作,分裂成两堆新的石子数量都大于等于1的石子堆。
现在牛牛需要通过分裂得到m堆石子,他想知道这m堆石子的最小值最大可以是多少?
示例1
输入
3,5,[3,5,6]
输出
2
说明
把5分裂成2和3
把6分裂成2和4
得到五堆石子[3,2,3,2,4]
备注:
1≤n≤1e5,n≤m≤∑ai,1≤ai≤1e9
第一个参数n代表石子堆的个数
第二个参数m表示需要得到的石子堆数。
第三个参数vector a代表每堆石子堆的石子个数
思路:令res表示分裂后m堆的最小值,res一定在[1, min{a[i], i=0,1...,n-1}]区间内,记左右区间分别为left, right。mid初始值去区间中值,即mid=left+(right-left)/2,利用二分思想不断找到mid的最终值。因为要