*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))\)来表示。如下图,红色的部分就是历史标记最大值:

posted @ 2021-04-22 18:39  __Anchor  阅读(31)  评论(0编辑  收藏  举报