数据结构
文章平均质量分 85
数据结构
Wu_while
一名退役OIer
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基础数据结构选做
基础数据结构选做原创 2022-10-12 20:25:53 · 491 阅读 · 0 评论 -
平衡树详解(fhq Treap)
你并不需要先学习Treap!原创 2022-01-25 10:45:17 · 1430 阅读 · 0 评论 -
动态开点线段树
前置芝士线段树引入在普通的线段树中,我们一般要开 4N4N4N 的数组以避免越界。然而,在一些题目中,空间限制并不允许我们这样做。这个时候,就需要使用动态开点线段树。动态开点线段树我们来观察一下普通线段树的左儿子和右儿子的表示方法:左儿子:p<<1右儿子:p<<1|1这样,虽然我们可以直接算出左右儿子,比较方便,但是,这样也浪费了大量的空间。在学习二叉树的时候,二叉树还有哪种存储方法呢?链式储存法,即对一个节点建立左右儿子指针,指向它的左右儿子。这样,建立新节点时原创 2021-10-09 16:51:07 · 3943 阅读 · 3 评论 -
LCA详解
引入来看例题:洛谷 P3379 【模板】最近公共祖先(LCA)给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。原创 2021-10-07 21:41:26 · 508 阅读 · 0 评论 -
平衡树详解(Splay)
引入先看例题:(洛谷 P3369 【模板】普通平衡树)您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1.插入 xxx 数2.删除 xxx 数(若有多个相同的数,因只删除一个)3.查询 xxx 数的排名(排名定义为比当前数小的数的个数 +1+1+1 )4.查询排名为 xxx 的数5.求 xxx 的前驱(前驱定义为小于 xxx,且最大的数)6.求 xxx 的后继(后继定义为大于 xxx,且最小的数)显然可以使用BST(二叉搜索树)完成,它的时间复杂度是 O(logn)O(log原创 2021-08-29 21:30:00 · 11694 阅读 · 10 评论 -
线段树详解
引入例题:(P3372 【模板】线段树 1)已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上 kkk。2.求出某区间每一个数的和。我们可以使用树状数组来解决这道题,然而这次我们要回归正解了!我们要使用线段树!线段树线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界原创 2021-08-28 19:11:36 · 992 阅读 · 0 评论 -
树状数组详解(求逆序对)
前置芝士单点修改和区间查询引入逆序对就是序列中 ai>aja_i>a_jai>aj 且 i<ji<ji<j 的有序对,求一段正整数序列中逆序对的数目比较容易想到使用归并排序解决,不过我们这次要用树状数组来解决。树状数组解决逆序对显然,以aia_iai为右端的逆序对数量即为[1,i−1][1,i-1][1,i−1]中大于aia_iai的数的个数。我们用类似桶的思路来考虑:每次把aia_iai存入,就统计已存入的数中大于aia_iai的数的个数。使原创 2021-08-07 20:53:59 · 499 阅读 · 0 评论 -
树状数组详解(区间修改和区间查询)
前置芝士单点修改和区间查询区间修改和单点查询引入(洛谷 P3372 【模板】线段树 1)已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上 kkk。2.求出某区间每一个数的和。这是线段树的模板题,然而我们要用树状数组去做它!可以看出这题就像是 单点修改区间查询 和 区间修改单点查询 的升级版,好,那我们就顺着这两道题的思路继续走。区间修改和区间查询我们还是利用差分,可以得:∑i=1nai=∑i=1n∑j=1ibj=n×b1+(n−1)×b2+...+bn=n×∑i=1n原创 2021-08-07 20:05:29 · 3491 阅读 · 1 评论 -
树状数组详解(区间修改和单点查询)
前置芝士单点修改和区间查询引入先看例题:(洛谷 P3368 【模板】树状数组 2)已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上 xxx;2.求出某一个数的值。这题和 树状数组1 有什么区别?没错,正如题目所说,这题是区间修改和单点查询!区间修改和单点查询区间修改和单点查询要怎么实现呢?这需要用到一个东西:差分。差分是什么呢?(知道的大佬可以跳过)对于一个数组a[]a[]a[],我们设它的差分数组为b[]b[]b[],则满足:b[1]=a[1]b[1]=a[1原创 2021-08-07 19:25:36 · 1669 阅读 · 3 评论 -
树状数组详解(单点修改和区间查询)
我们来看下面的例题:已知一个数列,你需要进行下面两种操作:1.单点修改:将某一个数加上 x2.区间查询:求出某区间每一个数的和我们有哪些方法呢?暴力。单点修改的时间复杂度为O(1),区间查询的复杂度为O(n)。前缀和。单点修改的时间复杂度为O(n),区间查询的复杂度为O(1)。我们可以看到,两种做法都有一个操作是O(1)的,但也都有一个操作是O(n)的。那有没有什么两全其美的做法呢?当然有了。有的人可能就会喊了:线段树!线段树固然好,但它也有它的缺点:算法常数大,编写难度高。那就原创 2021-06-28 21:54:57 · 1044 阅读 · 1 评论
分享