![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高级数据结构
meaqua!!
这个作者很懒,什么都没留下…
展开
-
线段树的简单实现(引入lazy_tag)
线段树是一种基于分治思想的二叉树,每一个结点都对应一个区间,叶子节点的区间L=R,非叶子结点,左孩子区间为**[L,(L+R)/2],右孩子区间为[(L+R)/2+1,R].所以和树状数组相比,线段树能更好的维护一个区间= =这也是其优势所在那么对于每一个结点,我们可以维护什么信息呢?区间的最值,区间和等等,具体根据题目的要求来确定;以下代码和示例均维护区间最值(最大值);以下是一些常用的操作,代码块里均有实现方式图源@bilibili 算法训练营看到这可能就有疑问了,线段树的最大作用不是原创 2022-06-29 11:22:02 · 139 阅读 · 0 评论 -
树状数组简单实现
树状数组作用:优点:查询区间和以及前缀和时间复杂度为O(logn),点更新O(nlogn)缺点:不适合区间更新= =当然区间更新肯定要我们的线段树啦;下面图源@bilibili_算法训练营ok这里重点提一下如何确定区间长度不妨转化下思路,找k个0不妨找二进制表示下第一个1的位置;对每个i(i>=1),因为我们知道对于任意的i,其补码为-i,所以区间长度len=(-i)&i比如i=8,二进制为1000,其补码为1000,进行与操作得到1000,即十进制...原创 2022-06-24 23:07:50 · 145 阅读 · 1 评论