@[HuYangMu2011](/user/632311) pushdown 那里 add 的 tag 写错了。
by HYdroKomide @ 2023-12-11 22:57:33
具体是哪@[HYdroKomide](/user/299883)
by huyangmu @ 2023-12-11 22:58:44
@[HuYangMu2011](/user/632311) pushdown 那里的 addtag 函数里,应该都传 tag[x],你看看你传的是什么
by HYdroKomide @ 2023-12-11 23:00:01
%%% 关注了@[HYdroKomide](/user/299883)
by huyangmu @ 2023-12-11 23:02:47
我猜是query的递归返回条件不对
你这个和我的写法不一样,但是我的是多加了第一个else if,然后就不超时了。
原本的是每次都到根节点才返回
```cpp
int query(int k, int l, int r) //当前到了编号为k的节点,查询[l..r]的和
{
if (a[k].l == a[k].r)
return a[k].sum;
else if (a[k].l == l && a[k].r == r)
return a[k].sum;
//else,要往下查询子节点,而lazy标记的影响还未必下传给了子节点,所以要下传lazy标记
if (a[k].add)
pushdown(k);
int mid = (a[k].l + a[k].r) / 2;
if (r <= mid)
return query(k * 2, l, r);
else if (l > mid)
return query(k * 2 + 1, l, r);
else
return query(k * 2, l, mid) + query(k * 2 + 1, mid + 1, r);
}
```
by hsdqiu @ 2023-12-16 19:38:31