*UOJ#164. 【清华集训2015】V

#164. 【清华集训2015】V

yhx's blog

貌似是一个论文题,是jls线段树的题目。

首先我们定义一种标记 ((a,b)),表示给这个区间先加上 (a) 再跟 (b)(max),不难发现题目里提到的三种操作分别都可以用这样的标记来代替:

1、区间加(v)((v,−inf))

2、区间减(v)((−v,0))

3、区间覆盖:((−inf,v))

考虑合并两个标记((a,b)),((c,d)),那么就会变成((a+c,max(b+c,d)))

现在考虑历史标记最大值,对于一个标记,我们可以将它看成是一个分段函数。第一段的函数是(y=b),第二段的函数是(y=x+a)。那么历史最大标记则可以用((max(a,c),max(b,d)))来表示。如下图,红色的部分就是历史标记最大值:

原文地址:https://www.cnblogs.com/Akmaey/p/14690968.html