你的代码:
...
for (int i = 0; i <= n; i++)
cin >> a[i];
int l = 1, r = 1e9;
while (l <= r)
...
不妨试试改成
...
int l = 1;
for (int i = 0; i <= n; i++)
cin >> a[i];
l = max(l, a[i]);
int r = 1e9;
while (l <= r)
...
因为你二分的最大和不仅要使得段数 <m ,
还要满足答案至少比数列中的最大值大。
比如我自己造的样例:
2 2
2 2
应输出 2 !
但因为分段是一数一段 ,
所以你的屎山会输出 l 的初始最小值 (1) 。