![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
糖宋元明清
这个作者很懒,什么都没留下…
展开
-
优先队列的实现(基于堆)
#include<stdio.h> struct PriorityQueue { int data[10000]; int length = 0; //保持以index为结点的堆的最大性质 int heaplfy(int index) { int least = index; if(index * 2 <= length && data...原创 2018-05-15 17:51:12 · 285 阅读 · 0 评论 -
线段树 001- 概述
线段树就是一个能高效维护动态区间的一个数据结构; 他能把一个区间分成多个区间,这些区间根据它们的之间的关系形成一个树形结构。 这个过程可以构建出一颗完全二叉树。 其中线段树的操作有: 1.修改 2.查询 比如我们现在要维护一个长度为n的区间的和,那么当n=10的时候,该区间所对应的树为: 可以发现每个节点代表一个区间,每个节点存的是该区间的和; ...原创 2018-08-09 14:29:02 · 203 阅读 · 0 评论 -
线段树002-区间修改
接下来讲解一下区间修改: 在线段树001-概述中讲了单点修改,现在又增加了一种操作将区间x~y的值修改为v; 比如在下面这个图中我要将1~5区间的值全都改为v; 正常人的思维是把1~5这个区间的修改看成对点1,2,3,4,5的单点修改;但这样的复杂度是nlog(n)是比较高的; 我们换一种想法,在修改区间的时候我们仍然像区间查询一样自上而下的寻找要修改的区间。那么我们最后 找到区间是...原创 2018-08-22 18:25:02 · 202 阅读 · 0 评论 -
扫描线
扫描线用于求多个不规则多边形相交的问题。 例如给你如下图,让你求该图的总面积 为了解决此类为题,我们引入了 扫描线 的概念. 扫描线是我们脑海中假象的一根线,它能够按照一个方向来扫描图形得到我们想要的信息; 例如具体到本次问题,那么扫描线的作用可以概述为:扫描线从按平行于x轴的方向,自下而上的扫描每一个图 形,并得到每个图形的面积信息; 那么经过扫描线的扫描后,得到的图形如下: 很...原创 2019-05-27 14:41:26 · 488 阅读 · 0 评论 -
划分树讲解
划分树是专门用来求静态区间第k的一种数据结构 它主要利用快排的思想来进行建树和查询 比如给你一个长度为12序列{1,9,4,5,8,3,4,6,5,2,5,7} 我们要按照划分树来建树该怎么建呢 1.首先和快速排序一样,分而治之。 我们把平均分为两部分,左区间任何一个数都小于右区间的一个数 同时左右两个区间的序列顺序和原来区间一样 我们还需要统计一下对于原区间[l,r]的任意一个数b...原创 2019-06-04 19:02:14 · 377 阅读 · 0 评论 -
主席树
主席树又叫可持久化线段树 为了实现可持久化这一目的,主席树在建树或者更新的时候会建立多个历史版本,以便于在之后的查询可以随时回到某个历史版本 建立历史版本的方法有多种,但是为了实现空间和时间上的最优,我们采用下面的方法建立历史版本 假定我们现在有一个问题,给你一个长度n为的序列data,和一个序列aux。每一时刻按从左往右的顺序从data数组中拿一个数加入aux数组。求任意一个时刻序列...原创 2019-06-11 21:18:53 · 246 阅读 · 0 评论