先保证推的公式没错
1.题目中说的是 N 个实数,所以要开double
2.线段树的修改函数中 k 要开double(仔细检查该开double的地方都开没开)
3.(本人原因)我写了一个名为maketag的函数,下面给出错误版本和正确版本
inline void maketag(int u, int l, int r, double x) {
lazy[u] += x;
sum2[u] += (r - l + 1) * x * x + 2.0 * x * sum1[u];
sum1[u] += x * (r - l + 1);
}
inline void maketag(int u, int l, int r, double x) {
lazy[u] += x;
sum2[u] += (r - l + 1) * lazy[u] * lazy[u] + 2.0 * lazy[u] * sum1[u];
sum1[u] += lazy[u] * (r - l + 1);
}
就是在下传时,没有正确更新维护的值,不是按照每次的修改值更新,而是原来这个区间就有的懒标记更新
这离谱错误我居然调了好久才看出来,我太蒻了……