数据结构
文章平均质量分 70
CCSU_HelloWorld
来得很匆忙
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu 2222 AC自动机模板题
#include #include #include #include using namespace std; #define maxn 241000 #define sigma_size 26 char s[60], t[maxn*5]; struct ac { int ch[maxn][sigma_size]; int val[maxn], f[maxn],原创 2013-08-20 11:46:57 · 384 阅读 · 0 评论 -
已知中序遍历和后序遍历,求前序遍历
/** 已知中序遍历和后序遍历,求前序遍历 算法的主要部分是将中序遍历分成左中右三部分 将后序遍历分成左右中三部分 最后后序建树的时候节点就等于中间的部分 左子树由中序遍历的左部分和后序遍历的左部分构建 右子树由中序遍历的右部分和后序遍历的右部分构建 */ #include #include #include #include using namespace std; struct nod原创 2013-09-24 21:04:37 · 1359 阅读 · 0 评论 -
poj 2104 划分树
看到这题时确实没有想到一个好的方法解题,纠结了很久之后搜了题解,原来解问题固定的算法,划分树。 划分树是靠线段树作为辅助工具,原理和快排相似。 划分树建树的过程和快速排序很类似,构建起来也比较简单,关键是在查询操作不太好理解。 poj 2104 AC代码: #include #include #include using namespace std; const int原创 2013-10-07 21:24:39 · 464 阅读 · 0 评论 -
KMP模板题 poj 3461 Oulipo
KMP算法理解链接:http://www.cppblog.com/oosky/archive/2006/07/06/9486.html poj 3461 http://poj.org/problem?id=3461 #include #include #include using namespace std; #define maxn 1000005 char t[maxn],原创 2013-08-18 15:26:48 · 447 阅读 · 0 评论 -
(trie树)LA 3942
Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 Trie树也有它的缺点,原创 2013-08-17 10:25:20 · 795 阅读 · 0 评论 -
归并排序求逆序数
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=117 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。 逆序数的直原创 2013-08-16 10:02:04 · 455 阅读 · 0 评论 -
树状数组 区间更新
树状数组天生用来动态维护数组前缀和,其特点是每次更新一个元素的值,查询只能查数组的前缀和, 但这个题目求的是某一区间的数组和,而且要支持批量更新某一区间内元素的值,怎么办呢?实际上, 还是可以把问题转化为求数组的前缀和。 首先,看更新操作update(s, t, d)把区间A[s]...A[t]都增加d,我们引入一个数组delta[i],表示 A[i]..转载 2013-08-16 16:56:58 · 1614 阅读 · 0 评论 -
RMQ(Range Minimum Query)
范围最小值(最大值)问题,给出一个n个元素的数组A1,A2,A3,···,An,通过RMQ这个数据结构能够快速的进行查询操作Query(L, R):计算min(AL,AL+1,···,AR)。 这类问题通常用ST算法(Sparse Table): 来看一下ST算法是怎么实现的(以最大值为例): 首先是预处理,用一个DP解决。设a是要求区间最值的数列,f[i,j]表示从第i个数起连原创 2013-08-15 16:22:26 · 537 阅读 · 0 评论 -
poj 1442 堆操作
题目链接:http://poj.org/problem?id=1442 题意:有一系列数字输入,问在输入到第u个数时,排在以访问次数x(x依次增加)为名次的第x小的数。 方法:用两个优先队列实现对堆(一个最大顶堆,一个最小顶堆)的操作,当输入到第u个数,第x访问时,最大顶堆存放u个数中前x个比较小数,最小顶堆存放另u-x个数。 代码如下: #include #include #incl原创 2013-08-14 19:11:45 · 566 阅读 · 0 评论 -
Treap
Treap=Tree+Heap Treap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是,Treap纪录一个额外的数据,就是优先级。Treap在以关键码构成二叉排序树的同时,还满足堆的性质(在这里我们假设节点的优先级大于该节点的孩子的优先级)。但是这里要注意的是Treap和二叉堆有一点不同,就是二叉堆必须是完全二叉树,而Treap可以并不一定是。原创 2013-08-14 13:43:01 · 430 阅读 · 0 评论 -
AVL树
在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文《An algorithm for the原创 2013-08-13 10:59:02 · 523 阅读 · 0 评论 -
二叉排序树
二叉排序树(binary sort tree)又称二叉搜索树(binary search tree),或者是一棵空树,或者是具有下列性质的二叉树: 1.若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值。 2.若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值。 3.它的左子树和右子树也分别为二叉排序树。 性能分析: 每个结点的C(i)为该结原创 2013-08-13 10:17:31 · 514 阅读 · 0 评论 -
二叉堆(堆排序)
堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。原创 2013-08-09 20:19:49 · 592 阅读 · 0 评论 -
LA 4670 ac自动机模板
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36265 #include #include #include #include using namespace std; #define maxn 11000 #define sigma_size 26 char s[151][80], t[100原创 2013-08-20 20:57:01 · 476 阅读 · 1 评论 -
hdu 3065 AC自动机
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:求模板串在文本串出现的次数。 方法:构造AC自动机求模板的次数,注意文本串中有不是大写字母的时候将指针返回0(也就是根)。 #include #include #include #include using namespace std; #define maxn 100000原创 2013-08-21 11:37:05 · 385 阅读 · 0 评论 -
SBT
SBT(Size Balanced Tree)是陈启峰提出的一种平衡二叉树,下面是他的论文,中文版的论文在这里。 SBT树模板 const int maxn = 10000000+10; struct SBT { int l, r, key, s; void init(int k) { l = r = 0, s = 1, key = k;原创 2013-12-22 22:10:19 · 569 阅读 · 0 评论
分享