非常细节的问题导致 WA
错误点
检查一下一些变量定义成局部变量了吗?
对于我这种热衷于全局变量的蒟蒻来说,这是个非常隐蔽的错误!!!(我调了好久还非常莫名其妙)
错误原因
为什么不能用全局?根本原因在于:全局变量会串函数!
比如说(mid 是全局变量,这是错误示范):
inline void build(int rt, int l, int r)
{
if (l == r)
{
tree[rt] = a[l];
return ;
}
mid = l + r >> 1;
build(rt << 1, l, mid);
build(rt << 1 | 1, mid + 1, r);
tree[rt] = tree[rt << 1] + tree[rt << 1 | 1];
}
注意到在下一层 build 递归回来之后,下一层递归已经更改了 mid 的值(这个变量是全局的),这样子就会导致 mid 不知不觉地被错误改变。
然而,局部变量只在局部发挥作用,不会有这种情况。
解决方法:
- 递归回来之后更新
mid(理论可行,我没试过)
- 把
mid 变成局部变量
另
如果帮到了你,请回复一个“前排”吧!