您的位置:首页 > 其它

IcpcCamp-day1-E

2017-02-13 22:02 162 查看
Question

求f(i)=ΣW[lca(i,j)] (i=1~n,j=1~i-1)

Tips

树链剖分+线段树(lazy)+差分思想?

Solve

考虑到每次询问为前i-1个点的贡献,所以先查询再插入进行修改。联想到LNOI的一道树链剖分题求的是g(i)=Σdep[lca(i,j)],做法是插入点时将点到根节点的路径上各点权值都+1,这样对于g(i)的询问,求的就是i点到根节点的路径上点的权值和,原因如下图



例如查询点4的时候,4到根节点所包含的各段路径长度即为各最近公共祖先的dep。同理,若讨论w[lca(i,j)],线段树每个叶子节点上记录的ans值为差分后的若干倍w’,具体实现时w’=w-w[fa],区间插入时一段连续的w’的和可按dfs序用前缀和做差来计算。

Step

1. 插入点i:

将i到根节点的区间上

1)点数+1(lazy)

2)ans值+该区间w’的和

2. 查询点i+1:

统计i+1到根节点区间上的ans值的和

Code

AC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: