zoukankan      html  css  js  c++  java
  • 线段树 区间更新 和 查找时更新时候的探讨。

    我们都知道区间更新时候有个lazy 标志。

    而这个lazy 标志 我们要使得其可以理论重叠。

    即使操作不能重叠。也尽可能让其重叠。

    比如:一道修改区间>x的值为gcd(x,val)的操作题。

    首先针对查找区间>x 这种查找。我们在节点上存储 区间最大值 作为剪枝。

    另外针对求gcd(x,val)操作。用向量存储X的每个阶段的值。

    另外这个题还有另外一个操作 是区间覆盖。

    那么明显的。当该操作要覆盖上去的时候要清除原来的向量中的所有内容。

    这便是操作之间的关系。

    另外谨记。操作是针对当前节点的下面的节点的。

    也就是说。你查找到的节点。其实是在update中更新了。

    而后续的节点 都是通过pushdown。

    讲讲区间覆盖。

    1:往往用hash来判断。建立关系。比如能看到几种颜色。比如之前那个三角形线段。 要不要 进向量。

    而三角形那个 有趣之处在于hash 的重复利用。。

    2:区间覆盖 比如看得见看不见。要注意边境的处理。

    离散化之后  你懂的。

    注意多种操作的时候 覆盖操作 和别的操作的关系。

    往往有覆盖 就没有别的操作。

    而别的操作 操作到有覆盖的时候。 改覆盖标志即可。

       另外。还有分当时有自己的操作 和 没有。

    如果不存。 可以直接更新到下面。左边孩子 和 右边孩子都要更新了。

    区间合并。

    求最长连续上升序列。

    查询的时候  返回结果要注意一点。 并非。+= 。

    括号匹配。

    确定 从头开始的每段连续和均>=0。

    这个做法是:每段连续和的最小值。

    这个最小值的更新。

    Min(左边min,左边sum + 右边min)

    另外。针对这个有转换问题。转换之后。最小值。变成了最大值。所以还得另外维护最大值。

    长个心眼。

    且整个和 为 0 。

    另外。针对这种问题。

    转换啊。什么的。标记繁多。记住一个一个 都不要漏

  • 相关阅读:
    Lua 语言环境安装
    python __init__.py 的作用
    python functiontools模块中的 wraps
    函数装饰器、类装饰器
    redis pipline 和 事务
    Innodb中的行锁与表锁
    mongoengine 分页 切片与 skip + limit 的区别
    python 可变类型传的内存地址, 不可变类型在传递的时候传的是值
    PHP常用人工智能库
    PHP批量给目录下所有的文件转换编码
  • 原文地址:https://www.cnblogs.com/Milkor/p/4522746.html
Copyright © 2011-2022 走看看