这个代码能 AC:
inline int calc(int x, int l, int r) {
if (c[x] >= 0)
return (r - l + 1) * b[x] + (l + r) * (r - l + 1) / 2 * c[x];
int mid = (1 - b[x]) / c[x];
if (mid < l)
return r - l + 1;
if (mid > r)
return (r - l + 1) * b[x] + (l + r) * (r - l + 1) / 2 * c[x];
return (mid - l + 1) * b[x] + (l + mid) * (mid - l + 1) / 2 * c[x] + r - mid;
}
但是我把其中一条式子都写错了,还能拿 95 分。写错的代码是长这样的(我跟题解对比的时候真的挺费眼的)。
inline int calc(int x, int l, int r) {
if (c[x] >= 0)
return (r - l + 1) * b[x] + (l + r) * (r - l + 1) / 2 * c[x];
int mid = (1 - b[x]) / c[x];
if (mid < l)
return r - l + 1;
if (mid > r)
return (r - l + 1) * b[x] + (l + r) * (r - l + 1) / 2 * c[x];
return (mid - l + 1) * b[x] + (l + mid) * (l - mid + 1) / 2 * c[x] + r - mid;
}