数据结构
clevone
也许是梦的缘故,流离之人追逐幻影
展开
-
树状数组简单易懂的详解
树状数组确实是个好东西啊,以前搞比赛的时候了解过它,会套用模版,但确没有深入理解这个东西,先学会用轮子,然后再学造轮子嘛,这段时间再回头研究了一下,发现二进制在算法中真的是的好东西,它可以使算法的时间复杂度降到n的二进制表示中的1相关,大家都知道,求一个二进制中的1的个数,这个时间复杂度为O(logn)O(logn)。有时候觉得树状数组难以理解,我觉得根本原因是:你还在用十进制的视角来看待树状...转载 2018-08-04 20:36:18 · 376 阅读 · 0 评论 -
浅谈线段树
数据结构——线段树O、引例A.给出n个数,n<=100,和m个询问,每次询问区间[l,r]的和,并输出。一种回答:这也太简单了,O(n)枚举搜索就行了。另一种回答:还用得着o(n)枚举,前缀和o(1)就搞定。那好,我再修改一下题目。B.给出n个数,n<=100,和m个操作,每个操作可能有两种:1、在某个位置加上一个数;2、询问区间[l,r]的和,并输出。回答...转载 2018-08-04 20:38:30 · 154 阅读 · 0 评论 -
浅谈Trie树(字典树)
Trie树(字典树)一、引入字典是干啥的?查找字的。字典树自然也是起查找作用的。查找的是啥?单词。看以下几个题:1、给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单词表中出现过。答...转载 2018-07-22 19:45:13 · 4490 阅读 · 1 评论 -
ST表算法详解
ST表算法详解(算是吧)ST表就是一个用来解决rmq(区间最值)问题的算法。 ST表不支持在线修改。 预处理时间复杂度O(nlogn),查询时间O(1)。 ST表算法详解(求最小值): 用mn[i][j]表示从j到j+2^i-1的最小值(长度显然为2^i)。 任意一段的最小值显然等于min(前半段最小值,后半段最小值)。 那么mn[i][j]如何用其他状态来继承呢? j到j+2^...转载 2018-07-03 21:08:49 · 555 阅读 · 0 评论 -
一步一步理解线段树
一 概述线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。线段树的每个节点表示一个区间,子节点则分别表示父节点的左右半区间,例如父亲的区间是[a,b],那么(c=(a+b)/2)左儿子的区间是[a,c],右儿子的区间是[c+1,b]。二 从一个例子理解线段树下...转载 2018-06-30 16:14:44 · 204 阅读 · 1 评论 -
优先队列priority_queue详解
优先队列引入优先队列是一种特殊的队列,在学习堆排序的时候就有所了解,点“击”查看。那么优先队列是什么呢? 说白了,就是一种功能强大的队列。如果不太清楚队列,可以看看我这篇博客。它的功能强大在哪里呢? 四个字:自动排序。优先队列的头文件&&声明首先,你需要#include<queue>using namespace std;这两个头...原创 2018-06-30 16:14:16 · 368 阅读 · 0 评论