10分警示后人
查看原帖
10分警示后人
826079
Autumn_Rain楼主2024/7/21 10:16

如果你的update是如下写法:

void upd(int u,int L,int R,int l,int r){
    if(L==R&&L>=l&&R<=r){
        t[u].w==sqrt(t[u].w);
        t[u].mx=sqrt(t[u].w);
        return;
    }   
    int mid=(L+R)>>1;
    if(l<=mid&&t[u*2].mx>1)upd(u*2,L,mid,l,r);
    if(mid<r&&t[u*2+1].mx>1)upd(u*2+1,mid+1,R,l,r);
    pushup(u);
}

请把第一个 if 改成下面那样,否则你的 max 会开2次根。

if(L==R&&L>=l&&R<=r){
    t[u].w=t[u].mx=sqrt(t[u].w);
    return;
}   
2024/7/21 10:16
加载中...