提供几种做法。
1.回滚莫队+虚树
(假了)
2.树剖+树状数组+平衡树。
先思考一下如何做链的问题。
无修改问题可以用扫描线。
对链扫描线没什么希望,所以对询问扫描线。
维护相同颜色连续段。发现每次如果暴力更新连续段,则时间复杂度是O(nlogn)的,所以写个set维护即可。
用树状数组查询。
树的做法把树剖分成链即可。
3.lct+树状数组。
上面的做法用set维护连续段,根据sdoi树点涂色的启发使用lct维护连续段。
在赋值时修改即可。
4.线段树+树状数组+树剖。
树点涂色这道题其实也可以使用线段树维护,这道题也可以用那道题的方法维护。但是比较难写。
5.分治+虚树+树状数组。待补。