zoukankan      html  css  js  c++  java
  • 历史最值

    有时,我们要求一个位置的历史最值,支持区间赋值,区间+。
    可以维护一个标记(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操作不多,所以可以暴力查询。

  • 相关阅读:
    ps:图层知识
    ps:选区的存储及载入
    ps:消除锯齿和羽化
    ps:不规则选区
    ps:建立规则选区
    python如何查看内存占用空间
    python-生成器
    python3-列表生成式
    python:迭代
    Photoshop画笔工具的使用
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/13639562.html
Copyright © 2011-2022 走看看