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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    bzoj4282 慎二的随机数列
    bzoj2839 集合计数
    bzoj1735 [Usaco2005 jan]Muddy Fields 泥泞的牧场
    bzoj3732 Network
    Kruskal重构树
    bzoj1568 [JSOI2008]Blue Mary开公司
    bzoj4576 [Usaco2016 Open]262144
    p2522 [HAOI2011]Problem b
    bzoj2463 谁能赢呢
    p4301 [CQOI2013]新Nim游戏
  • 原文地址:https://www.cnblogs.com/zengpeichen/p/10943152.html
Copyright © 2011-2022 走看看