![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM_数据结构
runninghui
这个作者很懒,什么都没留下…
展开
-
并查集
并查集(Union-find set),从字面上来看就是支持合并(union),查找(find) 的集合嘛。下面我们来学习一下这种数据结构 并查集的精髓(即它的三种操作,结合实现代码模板进行理解): 1、Make_Set(x) 把每一个元素初始化为一个集合 初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。 2、Find_Se原创 2013-05-12 13:09:38 · 840 阅读 · 0 评论 -
树状数组
写的很详细很好所有转过来了。。。 第01讲 什么是树状数组? 树状数组用来求区间元素和,求一次区间元素和的时间效率为O(logn)。 有些同学会觉得很奇怪。用一个数组S[i]保存序列A[]的前i个元素和,那么求区间i,j的元素和不就为S[j]-S[i-1],那么时间效率为O(1),岂不是更快? 但是,如果题目的A[]会改变呢?例如: 我们来定义下列问题:我们有n个盒子转载 2013-05-12 16:21:42 · 755 阅读 · 0 评论 -
字典树(Trie)
学习字典树一段时间 了,个人觉得字典树比较容易掌握,但是ACM中题目变化多端,我们只有多练习,才能对字典树的应用有更深的把握。 下面讲解一下字典树。 其实掌握字典树,只需要写过一个关于字典树的程序,记住它的结构就可以了。先看看字典树的定义 struct Trie { Trie *next[MAX]; bool isword; }; 其实上面那个字典树结点的定义只原创 2013-05-15 16:46:21 · 1562 阅读 · 0 评论 -
KMP模板
void get_next(const string sub, int *next) { int len=sub.length(); int i,k; next[0]=k=-1; for (i=0; i<len;) { if (k==-1 || sub[i]==sub[k]) { k+原创 2013-08-27 20:53:20 · 1854 阅读 · 0 评论 -
线段树
线段树基础知识 从简单说起,线段树其实可以理解成一种特殊的二叉树。但是这种二叉树较为平衡,和静态二叉树一样,都是提前已经建立好的树形结构。针对性强,所以效率要高。这里又想到了一句题外话:动态和静态的差别。动态结构较为灵活,但是速度较慢;静态结构节省内存,速度较快。 接着回到线段树上来,线段树是建立在线段的基础上,每个结点都代表了一条线段[a , b]。长度为1的线段成为元线段。非元转载 2013-03-08 08:16:04 · 862 阅读 · 0 评论 -
线段树入门
把问题简化一下: 在自然数,且所有的数不大于30000的范围内讨论一个问题:现在已知n条线段,把端点依次输入告诉你,然后有m个询问,每个询问输入一个点,要求这个点在多少条线段上出现过; 最基本的解法当然就是读一个点,就把所有线段比一下,看看在不在线段中; 每次询问都要把n条线段查一次,那么m次询问,就要运算m*n次,复杂度就是O(m*n) 这道题m和n都是30000,那么计算量达到了10^转载 2013-03-08 08:12:39 · 679 阅读 · 0 评论