题解:P12693 BZOJ3589 动态树
题意:一棵树,点有点权,支持子树加,求若干条链的并集的点权和。
链的并集好可怕啊,怎么维护?直接上重链剖分,一条链变成
按左端点从小到大排序遍历区间,维护当前的区间并集
l=f[1].l,r=f[1].r;
for(int i=2;i<=c;++i){
if(f[i].l>r)ans+=qr(l,r,1,n,1),l=f[i].l,r=f[i].r;
else r=max(r,f[i].r);
}
ans+=qr(l,r,1,n,1);
剩下的就是区间加区间和,线段树即可。