线段树
blank_monster
这个作者很懒,什么都没留下…
展开
-
线段树的应用
已知线段树最基本的操作是对于数组的单点修改和区间查询,因此有了以下推广: 之一:对一棵树进行单点修改和子树查询(不论这棵树是否为二叉树,不论节点是否顺序编号): 时间复杂度O(logn)即线段树的操作时间,退化成链也一样 原因,线段树查询需要知道l 和r,当节点顺序编号时, l就是该节点的编号, 所以我们只需知道r即可完成查询操作。将整棵树进行一遍dfs, 就有r = l + size[l] - 1,其中size[l]为以l为根节点的子树大小(包括l) 而当节点不是顺序编号时, 另开两个数组idx[], 和原创 2021-04-14 11:27:01 · 179 阅读 · 0 评论 -
线段树
感觉学长已经讲的很好了,但听完还是迷迷糊糊的,看着别人的模板好多遍,才初步对线段树有点感觉。深入的了解也不多,写一份模板吧。 struct SegmentTree{ int l,r;//指针域 int data,sum;//数据域,以sum为例 }nodes[MAX_N]; void push_up(int pos){ nodes[pos].sum = nodes[pos << 1].sum + nodes[pos << 1 | 1].sum; } void build(i原创 2021-01-25 22:51:16 · 55 阅读 · 0 评论