本苟蒻着实看不出哪出了问题,求各位dalao指点
#include <stdio.h>
int l, k;
long long max, min;
long long arr[100005];
long long check(long long x)
{
long long sum = 0, cnt = 0;
for (int i = 0; i < l; i++)
{
sum += arr[i];
if (sum >= x)
{
sum = 0;
cnt++;
}
if (sum < 0)
sum = 0;
}
return cnt;
}
int main()
{
bool flag = true;
long long left, right, mid;
left = 1;
right = 1e10;
scanf("%d %d", &l, &k);
for (int i = 0; i < l; i++)
{
scanf("%d", &arr[i]);
}
//找最小
while (left <= right)
{
mid = (left + right) / 2;
int t = check(mid);
if ( t <= k)
{
right = mid - 1;
if (t == k)
{
min = mid;
flag = false;
}
}
else
left = mid + 1;
}
if (flag)
{
printf("-1");
return 0;
}
//找最大
left = 1; right = 1e10;
while (left <= right)
{
mid = (left + right) / 2;
int t = check(mid);
if (t >= k)
{
left = mid + 1;
if (t == k)
{
max = mid;
}
}
else
right = mid - 1;
}
printf("%lld %lld", min, max);
return 0;
}