随笔分类 -  模板

摘要:概念: 对于若干个$m$位的二进制数$a_1,a_2,……,a_n$,它们任意组合异或出的结果全部可以用不超过$m$个数$b_1,b_2,……,b_n$异或出来 且$b_i$的最高位是第$i$位,则$b$称为$a$的线性基 构造: 每向a中加入一个元素$x$时,从高到低扫描$x$的每一位 扫描到第$ 阅读全文
posted @ 2018-12-17 13:06 Bennettz 阅读(192) 评论(0) 推荐(0)
摘要:什么是斜率优化? 通常我们在做动态规划的时候,会遇到如下形式的方程 $\Large f(i)=min(f(j)+w(j,i))$ 对于i来说,什么时候取j比取t要好呢? 显然是当$f(j)+w(j,i)\le f(t)+w(t,i)$时 如果我们可以将式子化简成$\large\frac{A(j)-A 阅读全文
posted @ 2018-05-24 07:44 Bennettz 阅读(174) 评论(0) 推荐(0)
摘要:预备知识 树的重心:删去这个点后,森林中所有树节点的最大值最小 点分治过程 具体实现 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define maxn 10005 struct Edge{ 阅读全文
posted @ 2018-04-21 17:26 Bennettz 阅读(181) 评论(0) 推荐(0)
摘要:爬山算法 大体思路 爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶 具体操作 把当前的节点和要走的节点的值进行比较。 如果当前节点是最大的,那么不进行操作;反之就用要走的的节点来替换当前节点,从而实现向山峰的高处攀爬的目的。如此循环直到达到最高点。 缺点 会陷 阅读全文
posted @ 2018-03-14 10:37 Bennettz 阅读(3120) 评论(1) 推荐(2)
摘要:转载自LCT(Link-Cut Tree)详解(蒟蒻自留地) 如果你还没有接触过LCT,你可以先看一看这里: (看不懂没关系,先留个大概的印像)http://www.cnblogs.com/BLADEVIL/p/3510997.html 看完之后我们知道,LCT和静态的树链剖分很像。怎么说呢?这两种 阅读全文
posted @ 2018-03-13 17:05 Bennettz 阅读(279) 评论(0) 推荐(1)
摘要:启发式搜索 启发式搜索是一种对搜索到的每一个位置进行评估,然后从评估的最优位置进行搜索直到目的地, 由于搜索时对每一个位置的评估是基于直观或经验的所有叫启发式搜索 A*算法 历史: 1964年Nils Nilsson提出了A1算法,是一个启发式搜索算法, 而后又被改进成为A2算法,直到1968年,被 阅读全文
posted @ 2018-03-10 09:35 Bennettz 阅读(1338) 评论(0) 推荐(1)
摘要:DFS序分块 将树节点按照DFS序每$sqrt{n}$个分成一块,可以处理关于子树问题 但是由于在DFS序上分块基本都可以用logn的数据结构代替,所以很不常用 这种分块方式保证块的大小和数量,不保证块的连通和直径 Size分块 对于一个节点,如果它的父亲所属块的大小小于$sqrt{n}$,则将该点 阅读全文
posted @ 2018-03-09 15:30 Bennettz 阅读(1016) 评论(1) 推荐(2)
摘要:基本莫队 概述 对于一个序列,如果有若干个区间询问,且对于每个询问【$l$,$r$】可以从【$l\pm 1$,$r$】或【$l$,$r\pm 1$】快速得出,那么我们可以使用莫队算法 莫队算法的大体思路是将询问存下来,每个询问由上一个询问推出来 如果我们对于每个每个询问都由上一个询问推出来,每个询问 阅读全文
posted @ 2018-03-07 08:42 Bennettz 阅读(196) 评论(0) 推荐(1)
摘要:概述 如果要维护一个序列,我们通常会使用数组和链表 但是如果要在序列中插入一些元素,以上两种数据结构的复杂度都是O(n) 于是就有了块状链表,它是数组和链表的结合:即一个链表的节点是一个数组 如果使链表的每个节点大小<sqrt(n),相邻两个节点大小和>sqrt(n),则链表长度也保持在 [sqrt 阅读全文
posted @ 2018-03-05 10:40 Bennettz 阅读(295) 评论(0) 推荐(1)
摘要:伸展树是一种自平衡二叉查找树,它将每次操作的节点都旋转到根节点,伸展树操作的均摊时间复杂度为logn 基本操作 存储 伸展操作 伸展树的最基本的操作当然就是伸展了,这也是它自平衡的基础 splay(x,S)表示在保持伸展树有序性的前提下,通过一系列旋转将伸展树S中的元素x调整至树的根部。 旋转操作就 阅读全文
posted @ 2018-01-30 20:50 Bennettz 阅读(621) 评论(0) 推荐(1)
摘要:AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,是一种高度平衡的自平衡二叉查找树 它的查找、插入和删除在平均和最坏情况下都是O(log n),这得益于它的性质: 在满足二叉查找树的性质情况下,还满足每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1 阅读全文
posted @ 2018-01-30 09:52 Bennettz 阅读(259) 评论(0) 推荐(1)
摘要:定义 SBT也是一种自平衡二叉查找树,它的平衡原理是每棵树的大小不小于其兄弟树的子树的大小 即size(x->l)$\ge$size(x->r->l),size(x->r->r),右边同理size(x->r)$\ge$size(x->l->l),size(x->l->r) 具体操作 旋转 旋转几乎是 阅读全文
posted @ 2018-01-27 15:58 Bennettz 阅读(2585) 评论(2) 推荐(1)
摘要:定义: Treap,顾名思义,就是tree和heap的结合,既满足二叉搜索树的性质,又满足二叉堆的性质 但是一个要求节点值小于右儿子的值,一个要求节点值大于右儿子的值,显然不可能做到 那我们只能一个节点存两个值,一个满足二叉搜索树(BST)性质,一个满足二叉堆的性质:如下图 节点中黑色的值满足二叉搜 阅读全文
posted @ 2018-01-26 16:10 Bennettz 阅读(327) 评论(0) 推荐(1)
摘要:定义 可持久化线段树是可以保留历史版本的线段树,相当于保留了每次修改后的线段树,并且可以对每次修改后的结果进行查询 主要思想 对于询问历史版本的问题,我们对每次修改都新建一棵线段树 但是如果修改次数特别多,这样肯定是不可行的,这就要用到可持久化线段树了 我们通过观察可以发现,对于线段树的每次修改,不 阅读全文
posted @ 2018-01-25 16:30 Bennettz 阅读(237) 评论(0) 推荐(1)
摘要:定义 划分树是一种基于线段树的数据结构。主要用于快速求出序列区间的第k大值。 划分树的根节点存储原数列 每个节点的左子节点存储它元素中较小的一半,右子节点存储它元素中较大的一半 并且同一个节点中元素的排列和原数列一样 例如1,5,3,4,2构成的划分树如下图所示 具体操作 建树 我们发现每层所有节点 阅读全文
posted @ 2018-01-24 22:12 Bennettz 阅读(320) 评论(0) 推荐(1)
摘要:定义 归并树是线段树和归并排序的合成,它利用线段树将归并排序的每一步都记录下来 例如我们对1,5,3,4,2进行归并排序,就可以生成下面的归并树 归并树的每个父节点就是两个子节点归并排序后的结果 并且归并树的叶子节点的顺序是初始序列的顺序 用处 可以快速求出在原序列的一个区间中比某个数小(大)的有多 阅读全文
posted @ 2018-01-24 16:21 Bennettz 阅读(3561) 评论(0) 推荐(2)
摘要:zkw线段树是一种用空间换取操作的简便性和时间常数的线段树。 它使线段树节点的存储位置有规律,从而将线段树的递归操作用循环替代 zkw线段树一般分为有区间修改和无区间修改两种,无区间修改的zkw线段树可以做到O(1)的单点查询,比有区间修改的要快 无区间修改的zkw线段树 建树 下面用一张图解释普通 阅读全文
posted @ 2018-01-20 12:45 Bennettz 阅读(1191) 评论(0) 推荐(1)
摘要:康托展开是一个全排列到一个自然数的映射,可以快速求出一个全排列在所有全排列中字典序排第几 康托展开公式 $\Large X=a_n*(n-1)!+a_{n-1}*(n-2)!+……+a_1*0!$ 其中$a_i$表示全排列中后i个元素,第n-i+1个元素排第几(然后要减一) 证明 $a_i*(i-1 阅读全文
posted @ 2018-01-15 08:49 Bennettz 阅读(395) 评论(0) 推荐(1)
摘要:定义 对于任意质数p $\Huge C_m^n\equiv C_{\biggl\lfloor\frac{m}{p}\biggr\rfloor}^{\biggl\lfloor\frac{n}{p}\biggr\rfloor}*C_{m\ mod\ p}^{n\ mod\ p}\ \ (MOD\ p)$ 阅读全文
posted @ 2017-12-21 14:53 Bennettz 阅读(146) 评论(0) 推荐(1)
摘要:求解方法基本与裸的最大流相同 不同之处在于增广路变为最短路,边需要记录费用,注:反向边的费用为相反数 并且需要在每次找到最短路后统计费用 阅读全文
posted @ 2017-12-19 20:50 Bennettz 阅读(142) 评论(0) 推荐(1)