如何在同一个版本内修改?
比如这样?:
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);
}
last 是上一个版本, rt 是该版本的根。
增加新版本的时候就将 rootrt=++tot。