题意:一棵树结构上有水,往一个节点加水,那么所有的子节点都会有水,或者排干一个节点的水,那么它的上面的节点都会没水。
用dfs序,数组记录区间内全部有水为1,区间内有没水的点就为0。
倒水:区间更新,排水:单点更新,并更新途中经过的所有点,查询:区间查询。
倒水:区间内所有的点变为有水,就是1,用lazy数组,要下传。
排水:所有节点的dfs序之间的相交只能是包含,并且只被祖先包含。那么在线段树中就将经过的点全部排去。这样祖先节点查询时就为0了,并且无关节点还是有水。不过这样有个BUG,假如开始全有水,如果一个节点排空了立即加水,那么祖先又有水了,实际上是没水,这时将祖先排水就行。
62 13 14 14 52 641 12 41 43 1就这。
#include #include #include #include #include #include #include #include