zoukankan      html  css  js  c++  java
  • 线段树模板

    一般的模板:区间加乘改,求区间极大 / 极小 / 和

      线段树模板 1:区间加,求区间和 / 最大 / 最小

        区间里的元素如果逐个修改就太慢了,所以考虑更快的方式——“懒惰标记”。

        对于一个区间,只需要在下传时,遇到一个完整区间就标记并退出,并对走过的区间进行懒标记。

        查询的时候,再在求和之前把懒标记加回来,就可以实现求和。

      线段树模板 2:区间加,区间乘,求区间和 / 最大 / 最小

        对于这种情况,标记下传的操作需要进行修改。

        原来,做一次加法只需要这个区间的和懒标记加上这个值,并且让这个区间的求和数组加上这个数的值*区间长度

        但是现在,又多了一个乘法懒标记,在实现区间加、区间乘操作时会麻烦一些:

      •     乘法懒标记数组清空时要赋值 1;
      •     区间加时,不用任何改动;
      •     区间乘时,不仅求和数组和乘法懒标记要乘上这个数,连加法懒标记也要乘上它才可以。

      线段树模板 3:区间加,区间改,求区间和 / 最大 / 最小

        区间改可以无视之前做过的任何操作,所以区间改时所有的懒惰标记都要改,当修改懒标记没有存储数时,最好存 -1 或不出现的数。

  • 相关阅读:
    k8s之docker被屏蔽后下载方法
    代码合并工具Beyond Compare的使用技巧
    (转)设计模式——观察者模式
    notepad问题汇总
    个人构建问题
    内部git常用总结
    (转)动态规划算法—买卖股票的最佳时机系列
    (转)java中引用传递和值传递
    互联网面试题
    (转)UML类图与类的关系详解
  • 原文地址:https://www.cnblogs.com/zengpeichen/p/10943152.html
Copyright © 2011-2022 走看看