Description
题目链接:SPOJ 6779
给你一棵有 $n$ 个节点的树,每个点有一个权值 $x_i$。接下来有 $Q$ 个操作,操作分为以下 $2$ 种:
1 a b
:求出 $a$ 到 $b$ (包括 $a$ 和 $b$)这条路径上的权值组成的序列的最大子段和(可以为空)。2 a b c
:将 $a$ 到 $b$(包括 $a$ 和 $b$)的路径上的所有点的权值改为 $c$。
数据范围:$n,Q\le 10^5$,$|x_i|,|c|\le 10^4$
Solution
我们可以用树链剖分来维护这棵树,修改时直接在线段树上覆盖。询问时,我们根据树链剖分的过程,可以发现只不过是把这条链拆成了若干段,那么我们可以对这几段依次查询、维护、更新答案。
关于如何用线段树维护序列的最大子段和(这个方法很套路),详见「SPOJ 1716」GSS3 - Can you answer these queries III。
时间复杂度:$O(Q\log^2 n)$
Code
1 |
|