求助,用了懒标记,但还是超时了

P3372 【模板】线段树 1

@[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


|