数据结构
ywszkszk
这个作者很懒,什么都没留下…
展开
-
蒟蒻的学习之——线段树2
线段树进阶模板二相对于模板一,加了个区间乘,于是在模板一的基础上需要多开个数组(记录乘法懒标记)、多写个函数(区间乘),还有要把懒标记下放函数做些修改。结构体内的变量定义:sum[]:线段树节点对应区间的元素总和;addv[]:线段树节点对应区间的所有元素待加的值(懒标记)。mulv[]:线段树节点对应区间的所有元素待乘的值(懒标记)。struct node{ ll sum;...原创 2019-01-04 13:05:10 · 108 阅读 · 0 评论 -
蒟蒻的学习之——线段树1
线段树用于处理什么问题?答:基于二叉树数据结构基础,进行如下几种操作单点修改/区间修改单点询问/区间询问能在nlogn的时间复杂度下解决问题建树与维护首先就是线段树的结点怎么存,方法有很多,我喜欢结构体首先就是线段树的结点怎么存,方法有很多,我喜欢结构体struct node{ ll sum; ll tag;}t[maxn<<2];别忘了空间开到4*n,...原创 2019-01-01 15:13:36 · 146 阅读 · 0 评论 -
蒟蒻的学习之——树状数组
树状数组树状数组最核心的东西lowbitlowbit就是二进制的最低位1和它后面的连续0取出来int lowbit(int n){ return n&-n;}如果你实在搞不懂,那么你就记住就OK啦单点更新void update(int x,int val)//更新单节点的值 { while(x<=n) { tree[x]+...原创 2018-12-26 13:12:26 · 142 阅读 · 0 评论 -
最短路之dijkstra
最短路问题前言做了洛谷上的单源最短路模板(弱化版)之后,洛谷推荐我单源最短路模板(普通版)。弱化版可以用spfa过,这一题会卡spfa,所以又进一步的学习了下dijkstra。dijkstra算法简介dijkstra是一种单源最短路径算法,朴素算法时间复杂度上限为O(n^2),加上堆优化之后更是具有O((n+m)log n) 的时间复杂度。但是dijkstra只适用于边权为正的无向图或者...原创 2019-01-14 18:26:31 · 264 阅读 · 0 评论 -
RMQ问题之ST算法
ST算法ST算法是用于解决RMQ问题(区间最值问题)的一种强有力的工具。O(nlogn)预处理,O(1)查询最值,利用的是倍增的思想。但…但是,使用ST算法的条件是没有修改操作,emmm算法流程(最大值为例)①预处理用f[i][j]表示,从i位置开始的2^j 个数中的最大值,例如f[i][j]表示的是a[i][i+2^j-1]这个区间的最大值。转移的时候我们可以把当前区间拆成两个区...原创 2019-01-31 16:14:13 · 142 阅读 · 0 评论 -
并查集之入门
并查集(Disjoint-set)并查集是一种可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构。主要涉及两种基本操作:合并和查询。①为了实现并查集,我们使用“代表元”法,即为每一个集合选择一个固定的元素,作为整个集合的代表。②为了定于归属关系,有以下两种思路:1.维护数组f,f[x]表示元素x所在集合的代表。优点可以快速查询,缺点是合并时需要大量修改。2.使用一颗树形结构存储每...原创 2019-02-01 14:38:17 · 142 阅读 · 0 评论