有一个关于线段树的小问题
  • 板块学术版
  • 楼主Stevehim
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/11/2 22:41
  • 上次更新2023/10/27 04:27:45
查看原帖
有一个关于线段树的小问题
759274
Stevehim楼主2022/11/2 22:41

刚学线段树,有点不明白“给所有区间加x”的代码

如果我要加值的区间被某一段区间覆盖,而加值的这段区间正好处于我这段区间的中间,那么不就无法进行二分然后递归了吗?

我参考的代码如下↓

void change(int p,int x,int y,int z){
    if(x<=t[p].l && y>=t[p].r){
        t[p].pre+=(long long)z*(t[p].r-t[p].l+1);
        t[p].add+=z;
        return;
    }
    spread(p);
    int mid=t[p].l+t[p].r>>1;
    if(x<=mid) change(p*2,x,y,z);
    if(y>mid) change(p*2+1,x,y,z);
    t[p].pre=t[p*2].pre+t[p*2+1].pre;   
}
2022/11/2 22:41
加载中...