随笔分类 -  数据结构

摘要:可持久化线段树 注意空间开大10~40倍 模板 修改查询历史版本 其实操作很简单,就root开个数组,然后每次修改旧版本时,边记录旧的,边开一个新的,新的先粘旧的,再修改 #include <cstdio> #include <cstring> #include <iostream> #includ 阅读全文
posted @ 2020-11-01 13:40 ke_xin 阅读(46) 评论(0) 推荐(0)
摘要:线段树 数学计算 这道题难在建模 线段树维护每次乘的数,然后除法就把当时乘的数变成$1$ 复杂度 \(O(QlogQ)\) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using name 阅读全文
posted @ 2020-10-20 09:59 ke_xin 阅读(48) 评论(0) 推荐(0)
摘要:莫队 https://www.cnblogs.com/WAMonster/p/10118934.html summary 莫队算法是离线(需要预知所有询问)处理一类区间不修改查询类问题的算法。 如果你知道了[L,R]的答案。你可以在O(1)或O(logn)的时间得到[L,R-1]和 [L,R+1]和 阅读全文
posted @ 2020-10-09 10:26 ke_xin 阅读(69) 评论(0) 推荐(0)
摘要:zkw线段树 ​ ————循环写法 zkw线段树不能处理有运算优先级的问题(加法乘法混合处理) 我们观察一下递归式线段树的代码,很容易就会发现:无论是建树、修改还是查询,都是自顶向下的。 zkw线段树则正好反过来,即自底向上 https://blog.csdn.net/keshuqi/article 阅读全文
posted @ 2020-10-08 21:03 ke_xin 阅读(52) 评论(0) 推荐(0)
摘要:平衡树 普通平衡树 加强版 vector伪平衡树 数据范围最大是$10^5$ ,毕竟复杂度是 \(O(n^2 )\) 无O2时千万不要使用 #include <iostream> #include <cstdio> #include <algorithm> #include <vector> usi 阅读全文
posted @ 2020-10-04 20:01 ke_xin 阅读(39) 评论(0) 推荐(0)
摘要:线段树分治 模板 #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const i 阅读全文
posted @ 2020-09-17 21:21 ke_xin 阅读(55) 评论(0) 推荐(0)
摘要:并查集 关键操作 1.预处理 for(int i=1;i<=m;i++) fa[i]=i; 2.路径压缩O(n) int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } 3.merge int fx=find(a[i].x),fy=find( 阅读全文
posted @ 2020-09-01 07:22 ke_xin 阅读(48) 评论(0) 推荐(0)
摘要:笛卡尔树 介绍 笛卡尔树是形如上图的一棵树,满足 ①堆的性质,如本图,小根堆,儿子的值大于等于父亲的值 ②二叉搜索树性质,即左子树的点key(默认为下标)比根小,右子树的点key(默认为下标)比根大 显然,按中序遍历这棵树,可得原序列 和treap不同的是,树高不保证是log ③询问下标i到下标j之 阅读全文
posted @ 2020-08-27 21:41 ke_xin 阅读(43) 评论(0) 推荐(0)
摘要:树链剖分——轻重链剖分 blog https://blog.csdn.net/qq_40482358/article/details/89676297 把树上的问题转化成序列问题(然后就快乐线段树维护) 概括一下就是把树划分为若干条链,然后一个链的dfs序是连续的,对于树上两点,我们可以通过跳链直到 阅读全文
posted @ 2020-08-26 21:58 ke_xin 阅读(52) 评论(0) 推荐(0)
摘要:栈 后进先出 数组模拟即可 例1 设计一个支持push,pop,top等操作并且可以在**O(1)**时间内检索出最小元素的堆栈 显然一个栈维护最小值时,pop后无法O(1)知道其他最小值 二叉堆是支持查最值的,但是O(logn)的 所以我们可以建两个栈,一个栈存原数据,另一个维护从栈顶到now的m 阅读全文
posted @ 2020-08-20 16:54 ke_xin 阅读(28) 评论(0) 推荐(0)
摘要:堆 一.堆的性质 堆是一颗完全二叉树 堆顶一定是优先级“最大”,最小” 堆一般有两种——小根堆和大根堆,对于大根堆而言,任何一个非根节点,它的优先级都小于堆顶,对于小根堆而言,任何一个非根节点,它的优先级都大于堆顶 堆一般是用二叉树来实现的 一颗完全二叉树,每个节点有一个权值。 父节点的权值总是大于 阅读全文
posted @ 2020-08-18 16:21 ke_xin 阅读(41) 评论(0) 推荐(0)
摘要:分块——优雅的暴力 参考 分块算法的思想是通过适当的划分,预处理一部分信息保存下来,用空间换取时间,达到时空平衡。 分块实现的基本框架: 划分块(一般将其分为$\sqrt n$块,每块也有$\sqrt n$个元素),预处理,操作或查询。 操作或查询通常为4步: 1.判断要操作或是查询的区间是否在一个 阅读全文
posted @ 2020-08-18 10:15 ke_xin 阅读(65) 评论(0) 推荐(0)
摘要:ST表 RMQ (Range Minimum/Maximum Query),即区间最值查询。对于长度为$n$的数列$A$,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列$A$中下标在$[i,j]$之间的最小/大值。如果只有一次询问,那样只有一遍for就可以搞定,但是如果有许多次询问就无 阅读全文
posted @ 2020-08-14 00:29 ke_xin
摘要:BST(Binary Search Tree)二叉搜索树 blog 是一棵空树或具有以下几种性质(简而言之,就是中序遍历有序)的树 若左子树不空,则左子树上所有结点的值均小于它的根结点的值 若右子树不空,则右子树上所有结点的值均大于它的根结点的值 左、右子树也分别为二叉搜索树 没有权值相等的结点。 阅读全文
posted @ 2020-08-14 00:28 ke_xin 阅读(44) 评论(0) 推荐(0)
摘要:树状数组 它能干的线段树都可(好像它最基本也就支持单点修改,区间求和——前缀和相减)。。。优点是码量very小 inline void update(int x,int v){ for(;x<=n;x+=x&(-x)) c[x]+=v; } inline int query(int x){ int 阅读全文
posted @ 2020-08-14 00:26 ke_xin 阅读(36) 评论(0) 推荐(0)
摘要:李超线段树 例1:HEOI segment 食用下面两个博客 https://www.cnblogs.com/Wendigo/p/12694123.html https://www.luogu.com.cn/blog/fzber0103/Li-Chao-Tree #include <iostream 阅读全文
posted @ 2020-08-14 00:24 ke_xin
摘要:权值线段树 ——维护某个区间内数组元素出现的次数 权值线段树会采用离散化或动态开点的策略优化空间。单次操作时间复杂度O(logn) 权值线段树和简单线段树的区别 权值线段树维护的是桶,按值域开空间,维护的是个数。 简单线段树维护的是信息,按个数可开空间,维护的是特定信息。 板子——额可打平衡树板子h 阅读全文
posted @ 2020-08-14 00:23 ke_xin 阅读(45) 评论(0) 推荐(0)
摘要:SPOJ GSS - Can you answer these queries系列 GSS1查询 区间最大子段和 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std 阅读全文
posted @ 2020-08-14 00:06 ke_xin 阅读(44) 评论(0) 推荐(0)
摘要:扫描线 参考博客 注解1:横着的扫描线,我们把矩形拆成上下两条线段,下面那条 k=1,上面的k= -1; h 就是到x轴的距离;val[ ]是线段长度 记得离散化 (代码里的 x[] ) #include <iostream> #include <cstdio> #include <algorith 阅读全文
posted @ 2020-08-14 00:05 ke_xin 阅读(108) 评论(0) 推荐(0)
摘要:维护区间gcd 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。//区间修改 2、“Q l r”,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。 对于每个询问,输出一个整 阅读全文
posted @ 2020-08-13 23:59 ke_xin 阅读(78) 评论(0) 推荐(0)