线段树算法笔记

线段树的优点:
  O(logn)时间内,在一段区间中求最大最小值

线段树的特征:

  • 二叉树
  • 每个节点表示一个区间的最大值
  • 左儿子 = 平分后左区间,右儿子 = 平分后右区间
  • 不可增减节点(线段数结点总数需要在最开始就给定)
  • 空间复杂度: O(n)

线段树的操作:

线段树的查询: O(logn)

  • 查询的区间 和 线段树节点区间 相等 -> 直接返回
  • 查询的区间 被 线段树节点区间 包含-> 递归向下搜索左右子树
  • 查询的区间 和 线段树节点区间 不相交 -> 结束
  • 查询的区间 和 线段树节点区间 相交且不相等 -> 分裂查询区间

线段树的建立: O(n)

  • 自上而下递归分裂
  • 自下而上回溯更新

线段树的更新: O(logn)

  • 自上而下递归查询
  • 自下而上回溯更新

问题特征:

  • 对区间求sum
  • 对区间求Max/Min
  • 对区间求Count

构建形式

    1. 下标作为建立区间
    2. 值作为建立区间

【参考】:

http://codeforces.com/blog/entry/18051

猜你喜欢

转载自www.cnblogs.com/Roni-i/p/9474556.html