Luogu5528 [Ynoi2012] WC,THUWC,CTSC与APIO2017
题意:维护一颗有根树,点有点权,边权均为
将
子树中与 距离模 为 的点权加上 。 查询点
的权值。
和 Luogu5309
有点类似,但难度超出许多。
取阈值
对于每个
将点按照深度
对每个组按照
可以一开始就把点按照
查找需要修改的区间时需要
std::lower_bound
,可以进一步离线变为线性,不过由于这部分常数不算大,没必要。
注意到修改有
由于没有强制在线,对每个
一个点的所有
可以将问题转化为
问题在于如何找到修改的左右端点。
可以模仿前面的做法,在对应深度的一层二分,但是需要多个
定义一个点的
这样,跳
可以使用长链剖分做到
然而,我们的查询是有性质的:查询一个点的
可以使用重链剖分,跳过的重链一共是
综上,令
- 附送 : P3591 [POI2015]ODW