我参考的是这篇题解,蒟蒻弄不明白为什么要使用可持久化啊???
我的原代码:
int update(int x,int y,int l,int r){
if(!x)
return y;
if(!y)
return x;
if(l==r){
mp[x].sum+=mp[y].sum;
return x;
}
int mid=l+r>>1;
mp[x].l=update(mp[x].l,mp[y].l,l,mid);
mp[x].r=update(mp[x].r,mp[y].r,mid+1,r);
mp[x].sum=mp[mp[x].l].sum+mp[mp[x].r].sum;
return x;
}
使用可持久化的代码:
int update(int x,int y,int l,int r){
if(!x)
return y;
if(!y)
return x;
int mid=l+r>>1;
int pp=++cnt;
mp[pp].sum=mp[x].sum+mp[y].sum;
mp[pp].l=update(mp[x].l,mp[y].l,l,mid);
mp[pp].r=update(mp[x].r,mp[y].r,mid+1,r);
return pp;
}