RT WA#1,然后输出了一下左右端点发现重复求助
#include <bits/stdc++.h>
using namespace std;
const int N = 555;
int m, k;
int a[N];
int L[N], R[N];
bool check(int x)
{
int sum = 0;
int cnt = 1;
R[cnt] = m;
for (int i = m; i; i --)
{
if (sum + a[i] <= x)
sum += a[i];
else
{
L[cnt] = i + 1;
R[++ cnt] = i;
sum = a[i];
}
}
L[cnt] = 1;
return cnt <= k;
}
void sf()
{
cin >> m >> k;
for (int i = 1; i <= m; i ++)
scanf("%d", &a[i]);
int l = 1, r = (int) 1e9;
while (l < r)
{
int mid = l + r >> 1;
if (check(mid))
r = mid;
else
l = mid + 1;
}
check(l);
for (int i = k; i; i --)
printf("%d %d\n", L[i], R[i]);
}
int main()
{
int t;
cin >> t;
while (t --) sf();
return 0;
}