历史最值

有时,我们要求一个位置的历史最值,支持区间赋值,区间+。
可以维护一个标记(a,b):x=max(a+x,b)
则两个标记(a,b),(c,d)合并后的结果是(max(a,c),max(b,d))
这是因为实际上标记可以被视为直线的半平面交。画图即可知道这样合并。
如果进行区间+x,则打上标记(x,-inf)
如果进行区间赋值x,则打上标记(-inf,x)
这样子即可维护。
jzoj5067
题目要求我们求出“炸弹能够爆破到的连续段”。
考虑一个建筑,维护它现在能被炸弹爆破到的连续段的长度a,和最大长度b。
当一个炸弹影响到它,则a+=1,b=max(b,a)
否则a=0
这是个经典的历史最大值问题。
题目的限制是二维偏序问题。
这是因为当[l,r] or [x,y]!=0
max(l,x)<=min(r,y)
由于l<=r,x<=y
所以l<=y,x<=r
所以更新a可以用kd树。
把更新范围内的点+1,范围外的点变为0即可。
3操作不多,所以可以暴力查询。

posted @ 2020-09-09 16:17  celerity1  阅读(131)  评论(0编辑  收藏  举报