pushdown2内不要把p的add1归零。
考虑先覆盖再加,你的pushdown2会把加的标记抹掉。
by UMS2 @ 2024-02-27 07:15:37
update1内覆盖时要将加的标记消除。
并且里面pushdown2可以删掉,你的pushdown1里面已经有了。
by UMS2 @ 2024-02-27 07:21:17
query里没有必要pushup,此外应该没啥问题 @[陈asuna](/user/572048)
by UMS2 @ 2024-02-27 07:23:30
优化的话可以把覆盖和加单独做成两个函数,这样 pushdown 和 update 的时候直接调用。
可以把 pushdown2 并到 pushdown1 里用两个 if 并列。
flag 和 add2可以写成一个,把 add2 默认值设置成 inf 就可以实现。
by UMS2 @ 2024-02-27 07:29:32
build 里面,应该是要到 l==r 时再赋值,不应该直接赋值。
```cpp
void build(int k,int l,int r){
line[k].l=l,line[k].r=r;
line[k].upt=inf;
if(l==r){
line[k].val=w[l];
return;
}
int mid=l+r>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
kp(k);
}
```
by UMS2 @ 2024-02-27 07:35:57
@[UMS2](/user/730828) 感谢大佬,已经AC!其实最后那个op==3写错了,应该是printf("%lld\n"...),改了前头忘改后头了
by 陈asuna @ 2024-02-27 11:45:24