Uoj#435. 【集训队作业2018】Simple Tree
题意:给出一棵
将
到 的路径上的点点权加上 (其中 ) 询问在
到 的路径上有多少个点点权 询问在
的子树里的点有多少个点点权
强制在线,
首先树剖,转化成序列问题:
将
加上 (其中 ) 询问
考虑分块,整块维护有序序列(将相同数缩合起来),加减时移动指针,散块暴力重构。
查询时散块暴力,整块直接读取答案。
设块大小为
考虑树链剖分拆路径形成的
重构时可以归并,复杂度
总复杂度为
然而我的分块水平不够,上面那个做法实在有点难写……
考虑
那么我们只需要考虑
每个块开一个桶,维护后缀和,这样修改就十分简便了。
但是,受到空间复杂度的限制,块大小不能开太小。