传送门
线段树好题。
要求支持的操作:
1.区间变成 m a x ( x i − a , 0 ) max(x_i-a,0) max(xi−a,0)
2.区间加
3.区间覆盖
4.询问单点最值
5.询问单点历史最值
注:以下提到的标记都是向下传递的懒标记。
这题直接更新区间最大值貌似不好维护,因此我们需要更换思路,对于每个节点维护一个标记 ( a , b ) (a,b) (a,b),来表示在上一次修改这个区间之后当前区间的所有数都变成 ( x i + a , b ) (x_i+a,b) (xi+a,b),这样的话,第一个操作变成了 ( − a , 0 ) (-a,0) (−a,0),第二个操作变成了 ( a , − i n f ) (a,-inf) (a,−inf),第三个操作变成了 ( − i n f , a ) (-inf,a) (−inf,a)。然后查询的时候只用查询单点的 ( a , b ) (a,b) (a,b),然后输出 ( x i + a , b ) (x_i+a,b) (xi+a,b)的较大值就行了。
然后我们考虑这个标记如何合并,假设现在已经有了一个标记 ( a , b ) (a,b) (a,b),从父亲节点传过来了一个标记 ( c , d ) (c,d) (c,d),那么原本这个点的最大值是 m a x ( x i + a , b ) max(x_i+a,b) max(xi+a,b),现在就变成了 m a x ( m a x ( x i + a , b ) + c , d ) max(max(x_i+a,b)+c,d) max(max(xi+a,b)+c,d)<
2018.07.28 uoj#164. 【清华集训2015】V(线段树)
最新推荐文章于 2020-01-19 22:46:43 发布
这篇博客介绍了线段树在处理区间操作中的应用,包括区间变成最大值、区间加、区间覆盖、单点最值和单点历史最值的查询。通过维护标记(a, b)和(hisa, hisb)来实现这些操作,讨论了如何合并这些标记以进行高效更新和查询。最后给出了代码实现。"
104271353,8695938,c3p0数据库连接池快速入门,"['数据库连接池', 'c3p0', '数据库管理']
摘要由CSDN通过智能技术生成