二分查找
int main() {
scanf("%d %d", &n, &m);
double l = 0, r = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", &cows[i]);
r = std::max(r, (double)cows[i]);
} //最小左区间 最大右区间
while(r - l > 1e-5) { //开始二分 因为是实数所以这里还搞个精度
double mid = (l + r) / 2; // 不是>>1 这里是实数
if(check(mid)) l = mid; //将问题转变为判定问题
else r = mid;
} printf("%d\n", (int)(r * 1000)); //因为我们找的极大值 所以要右端点*1000 否则可能会出错
return 0;
}
排序问题等等。