MnZn主席树求助
  • 板块学术版
  • 楼主XiaoYiii
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/17 10:38
  • 上次更新2024/3/17 12:04:18
查看原帖
MnZn主席树求助
1025891
XiaoYiii楼主2024/3/17 10:38

如何在同一个版本内修改?

比如这样?:

void change(int last, int pos, int l, int r, int &x, int rt){
    if(x < root[rt]) x = ++tot;
    if(l == r){
        maxx[x] = maxl[x] = maxr[x] = 1;
        return;
    }
    int mid = (l + r) >> 1;
    if(pos <= mid){
        if(!rc[x]) rc[x] = rc[last];
        change(lc[last], pos, l, mid, lc[x], rt);
    }
    else{
        if(!lc[x]) lc[x] = lc[last];
        change(rc[last], pos, mid + 1, r, rc[x], rt);
    }
    update(l, r, x);
}

lastlast 是上一个版本, rtrt 是该版本的根。

增加新版本的时候就将 rootrt=++totroot_{rt} = ++tot。

2024/3/17 10:38
加载中...