抄书的区间可能是一个人抄一页,如果你的写法和我一样,这样是错的:
for(int i = m; i >= 1; i--) {
sum += a[i];
if(sum <= ans) l = i;
else {
sum = a[i];
L[tot] = l, R[tot--] = r;
r = i;
}
}
原因:一个人负责一页的时候没有更新L。
改为如下即可AC:
l = r = m;
for(int i = m; i >= 1; i--) {
sum += a[i];
if(sum <= ans) l = i;
else {
sum = a[i];
L[tot] = l, R[tot--] = r;
l = r = i;
}
}
L[1] = 1, R[1] = r;