数据结构
文章平均质量分 91
算法小猪
unknow.
展开
-
单调队列【总结】
一、基本概念单调队列是指:单调递增或单调递减的队列。所以它也有如下几个性质:1.队列中的元素在原来的列表中的位置是由前往后的(随着循环顺序入队)。2.队列中元素的大小是单调递增或递减的。3.从队尾入列,队首或队尾出列时间复杂度:O(N)二、例题1.最大子序和(dp+单调队列优化)题目描述输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大。例如 1,-3,5,1,-2,3当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6输入第一行两原创 2021-07-12 22:42:49 · 1927 阅读 · 2 评论 -
树链剖分详解
目录一、树链剖分相关概念1.为啥要剖分2.轻边和重边3.轻重边路径剖分的性质二、树链剖分的实现1.重链剖分一、树链剖分相关概念1.为啥要剖分1.可以维护树路径上的信息(维护)2.将一棵树划分成若干条链,用数据结构去维护每条链,复杂度为O(logN)O(logN)O(logN)。(复杂度低)2.轻边和重边将树中的边分为:轻边和重(zhong)边定义size(x)size(x)size(x)为以xxx为根的子树的节点个数。令vvv为xxx的儿子节点中sizesizesize值最大的节点,那么边(原创 2020-08-13 23:01:23 · 1358 阅读 · 1 评论 -
单调栈【总结】
一、单调栈是个啥??顾名思义,单调单调,不就是数据有序的栈吗?所以单调栈分为两种:1.单调递增栈2.单调递减栈让我们归纳下:栈内的元素,按照某种方式排序下(单调递增或者单调递减), 如果新入栈的元素破坏了单调(有序)性,就弹出栈内元素,直到满足单调(有序)性。(这里所说的顺序是出栈顺序)而且单调栈可以很方便地求出某个数的左边或者右边第一个比它大或者小的元素,总时间复杂度O(N)O(N)O(N)。(这令人心动的复杂度)二、如何维护单调栈??(以单调递增栈为例)进栈操作:每次入栈前先检验栈顶元原创 2020-07-23 22:41:08 · 329 阅读 · 0 评论 -
树与图的遍历【总结】
铺垫树与图最常见的存储方式就是邻接表。树可以看作是具有N−1N-1N−1条边的无向图,他们的边都存储在一个邻接表中,邻接表以headheadhead数组为表头,使用ververver和edgeedgeedge数组分别存储边的终点和权值,使用nextnextnext数组模拟链表中的指针。树与图的深度优先遍历深度优先遍历,就是就是在某一个节点xxx有多条分支时,任选一条边走下去,进行递归,直到回溯到xxx,再考虑走另一条边,根据上面提到的存储方式,我们可以采用下面的代码,调用dfs(1)dfs(1)dfs原创 2020-07-29 21:20:26 · 912 阅读 · 0 评论 -
士兵杀敌(二)【线段树】
题目描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。输入只有一组测试数据第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000)随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=原创 2020-07-29 21:21:27 · 402 阅读 · 1 评论 -
线段树【总结】
目录一、线段树的特征二、线段树的性质三、线段树的建树四、线段树的单点修改五、线段树的区间查询一、线段树的特征1.是一棵树2.这棵树是用来在区间上进行统计的3.树上的每一个节点都代表一个区间,如[1,N]5.对于节点[l,r],左节点为[l,mid],右节点为[mid+1,r],其中mid=(l+r)/2(向下取整)二、线段树的性质如果观察一下线段树(...原创 2020-04-04 22:55:20 · 251 阅读 · 0 评论 -
堆结构【总结】
一、堆的定义堆结构是一种数组对象,它可以被视为一棵完全二叉树,如下图:二、堆的性质设数组A的长度为len,二叉树的结点个数为size,size≤len,则A[i]存储二叉树中编号为i的结点值(1≤i≤size),而A[size]以后的元素并不属于相应的堆,树的根为A[1],并且利用完全二叉树的性质,我们很容易求第i个结点的父结点、左孩子结点、右孩子结点的下标了,分别为:i/2、2...原创 2020-07-29 21:24:22 · 6549 阅读 · 0 评论