【数据结构】
文章平均质量分 79
wodasini
这个作者很懒,什么都没留下…
展开
-
AC自动机 —— 多模式匹配 模板、个人理解及详细注释
解决单个字符串匹配的方法是KMP算法得益于其next数组,整个算法时间复杂度被显著压缩。在O(n+m)的时间内即可以算出模式匹配。 AC自动机是一个支持多模式匹配的算法。也就是给出模式串A1,A2,A3……An,以及一个字符集S在模式串长度不大的情况下算出匹配数有N个模式串,平均长度为L;文章长度为M。建立Trie树:O(N*L) 建立fail指针:O(N*L) 模式匹配:O(M*L) 所以,总时...原创 2018-03-29 17:49:27 · 217 阅读 · 0 评论 -
【poj 2352】 Stars 及浅谈树状数组
树状数组: 1、 一个可以动态维护前缀和的一个数据结构,支持求和和单点修改。在拓展情况下可以支持区间修改。 2、 优点:代码短,O(lgn)的开销lowbit是非常有用的 x&(-x) 利用补码的性质得出最低位的数字。核心代码:inline int lowbit(int x){ return x&(-x);} void add(int x,int val) ...原创 2018-04-14 22:43:27 · 174 阅读 · 0 评论 -
【线段树(递归版)】—— 点修改 区间覆盖 区间修改
线段树接触了也很久,但总是没一个安定的写法,各种花里呼哨的都写过,老实的时候连指针版的都写过。但款式那么多并没有用,到时候用起来反而坑坑洼洼的,还不如定一个标准模式。虽然是非递归的线段树代码简单而高效,但是万事慢慢来,从最基础简单的在博客开始写起。此次我们介绍的是递归版的线段树。“线段树是一种特殊的区间树“线段树是什么东西?简单的说,线段树是把 [1,n] 一段区间不断二分二分,直至每个树的节点是...原创 2018-04-10 19:09:34 · 1400 阅读 · 0 评论 -
【ECNU OJ 2918】k-th number 可持久化线段树 + 离散化
什么叫可持久化线段树?我看到非常一个犀利的解释:“线段树是让你在区间内进行修改以及询问的一个数据结构,但可持久化线段树就是想考考你,询问第x个版本的线段树的结果” 先要明白我们不可能真的取造n个线段树,必然是分分钟TLEMLE。 而是要在原来的线段树上进行操作,才能达到目标。 说实话,其实构建方法很简单巧妙。1、 首先要明确的一点是:由于可持久化线段树保存历史版本,不能像原先一样利用二进制的特点,...原创 2018-04-11 10:33:43 · 155 阅读 · 0 评论 -
【POJ 2985】 The k-th Largest Group Treap+并查集
Treap:佛系平衡树,爱转不转,靠随机,靠随缘,只有单旋转。比普通的二叉树多一个priority值,保存结点的权重用随机数生成。如果一个节点的儿子比他的父亲优先级大【或小】,就执行一次单选转。期望平均O(nlgn) 可以说是很随缘了。删除稍微复杂一点:1、叶子节点,直接消失。2、没有左儿子/右儿子,把该节点反复执行相应旋转,转到情况1,直接删除。3、朝优先级低的那方向转。模板const int ...原创 2018-04-13 22:36:08 · 193 阅读 · 0 评论 -
【ZOJ 2112】 线段树套平衡树
题目大意: 给定一个数列,定义两种操作:1、修改第n个数的值2、求[l,r]区间内第k大的值。方法:线段树维护区间,treap树维护第k大(splay当然也可以)树套树第一题。。没想到真的是每个线段树上的节点建一棵平衡树。。。。。然后修改值就是在所有相关区间内的平衡树里,erase一个值再insert一个值。。。。简直恐怖查询就是二分答案,因为每个区间都有一棵树,所以可以很快就可以在O(lgn)里...原创 2018-04-14 09:57:38 · 289 阅读 · 0 评论