警钟长鸣(if you WA and 0pts)
查看原帖
警钟长鸣(if you WA and 0pts)
562521
junhaowang楼主2024/8/5 11:10

非常细节的问题导致 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 变成局部变量

另

如果帮到了你,请回复一个“前排”吧!

2024/8/5 11:10
加载中...