思路:
还是树链剖分+线段树…
这题难一点的地方就在于线段树的处理
我们可以记录下区间内的颜色段个数, 然后维护它
但有个问题, 合并两个区间时中间的颜色段可能跨了左右两个区间, 所以不能简单地将颜色段个数加起来
我们还需要记录区间两端的颜色来判断合并区间时是否有颜色段也合并了, 如果是则合并时颜色段个数需减1
还有一个细节需要注意, 在沿路径爬的时候, 也有可能颜色段会合并, 这时也需要将答案减1
代码:
1 |
|
还是树链剖分+线段树…
这题难一点的地方就在于线段树的处理
我们可以记录下区间内的颜色段个数, 然后维护它
但有个问题, 合并两个区间时中间的颜色段可能跨了左右两个区间, 所以不能简单地将颜色段个数加起来
我们还需要记录区间两端的颜色来判断合并区间时是否有颜色段也合并了, 如果是则合并时颜色段个数需减1
还有一个细节需要注意, 在沿路径爬的时候, 也有可能颜色段会合并, 这时也需要将答案减1
1 | #include <iostream> |