Warning! : 一个函数如果没有返回值,你也有可能得到正确的结果。因为函数调用完了之后你要返回的东西也许就在内存空间里。但是这么提交你肯定会WA。别问我怎么知道的。


以下这个函数可以自动将ans返回给调用它的scanf(),然而我们没有写return ans;这一句。



下面进入题解

题意:

给定一个n个节点(n<=20000)的树,每条边都有一个权值。给定5种操作,共m个(m<=20000)。

1.C a b :将a边的权值变为b
2.N a b :将a到b路径上的边的权值取相反数
3.MAX a b :求a到b的路径上的边的权值最大值
4.MIN a b :求a到b的路径上的边的权值最小值
5.SUM a b :求a到b的路径上的边的权值和

思路:

做了这么多的树链剖分,不难发现这显然是树链剖分的题。但是为什么我们要做这道题呢?因为它要300行。
首先,你得写出一个支持单点修改、区间取反、区间查询最大最小和的线段树。这些函数名打完,再加上树链剖分的基本函数名,就已经100行了。
然后等我们打完了所有的函数,一数,248行。震惊!
具体怎么实现的,请看代码