警示后人,调不出来的都来看看
查看原帖
警示后人,调不出来的都来看看
756843
Lilium_davidii楼主2024/5/27 20:53

动态开点线段树一定要访问再开,不访问千万别开,在pushup和merge的时候有可能会出现虚点错误转移的情况。

错误示范:

void update(int,p,int l,int r,intx,int k){
    ******
    if(!lc[p]){
        lc[p]=++cnt;
    }
    if(!rc[p]){
        rc[p]=++cnt;
    }
    int mid=(l+r)>>1;
    if(x<=mid){
        update(lc[p],l,mid,x,k);
    }else{
        update(rc[p],mid+1,r,x,k);
    }
    ******
}

正确示范:

void update(int p,int l,int r,int x,int k){
    ******
    int mid=(l+r)>>1;
    if(x<=mid){
        if(!lc[p]){
            lc[p]=++cnt;
        }
        update(lc[p],l,mid,x,k);
    }else{
        if(!rc[p]){
            rc[p]=++cnt;
        }
        update(rc[p],mid+1,r,x,k);
    }
    ******
}
2024/5/27 20:53
加载中...