随笔分类 -  学习笔记

备忘知识点记录
摘要:回文树(也就是回文自动机)实际上是奇偶两棵树,每一个节点代表一个本质不同的回文子串(一棵树上的串长度全部是奇数,另一棵全部是偶数),原串中每一个本质不同的回文子串都在树上出现一次且仅一次。 一个节点的fail指针指向它的最长回文后缀(不包括自身,所有空fail均连向1)。归纳容易证明,当在原串末尾新 阅读全文
posted @ 2019-07-09 17:37 HocRiser 阅读(496) 评论(0) 推荐(0)
摘要:经典问题(以下全部默认$n\leqslant m$):$\sum\limits_{i=1}^n\sum\limits_{j=1}^{m}gcd(i,j)=\sum_{d=1}^n\varphi(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor$ 阅读全文
posted @ 2019-04-28 17:43 HocRiser 阅读(187) 评论(0) 推荐(0)
摘要:二进制分组思想很简单,就是把下标拆成几个2的次幂的和,对每个2的次幂维护答案,复杂度是暴力重构一组的复杂度乘log(如果可以归并可能会少个log)。 这里其实想整理下一些修改独立的数据结构题的套路。 离线算法: (1) 只有插入:CDQ分治。 (2) 有删除: 支持删除操作:CDQ分治。 不支持删除 阅读全文
posted @ 2019-04-19 11:04 HocRiser 阅读(805) 评论(0) 推荐(0)
摘要:笛卡尔树的节点具有两个属性:键值与权值。 中序遍历每个节点,则其键值递增。任意一个父亲的权值都一定大于(小于)其儿子的权值。 由此可知,笛卡尔树的键值具有二叉搜索树的性质,权值具有堆的性质。Treap就是实现了一棵笛卡尔树。 笛卡尔树一般是根据序列建立的,一般以序列下标为键值,序列中的数为权值。 它 阅读全文
posted @ 2019-03-29 12:31 HocRiser 阅读(608) 评论(0) 推荐(0)
摘要:FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap、splay等能支持的操作(只有在LCT中会比splay复杂度多一个log)。最重要的是,它是OI中唯一一种支持可持久化的平衡树。 以下只提供题表与代码,不提供教程。 1.[BZOJ3224]普通平衡树 FH 阅读全文
posted @ 2019-02-24 16:08 HocRiser 阅读(865) 评论(0) 推荐(1)
摘要:长链剖分,类似于重链剖分(dsu on tree)的一种替代算法。最广泛的用法是优化与深度有关的树上DP,以及处理一些与点分治类似的问题。有一部分长链剖分题也可以用dsu on tree做,单复杂度往往会多一个log。 每个点找到高度最大的儿子作为自己的重儿子,连续的重儿子形成重链。可以发现,一个点 阅读全文
posted @ 2019-02-22 01:01 HocRiser 阅读(489) 评论(0) 推荐(0)
摘要:dsu on tree,又名树上启发式合并、重链剖分,是一类十分实用的trick,它常常可以作为一些正解的替代算法: 1.DFS序+线段树/主席树/线段树合并 2.对DFS序分块的树上莫队 3.长链剖分(但复杂度会多一个log) 4.点分治(通常可以做有根树的点分治) 重链剖分的概念,用一个DFS找 阅读全文
posted @ 2019-02-21 20:20 HocRiser 阅读(797) 评论(0) 推荐(0)
摘要:Prufer序列 在一棵n个节点带标号树中,我们认为度数为1的点为叶子。n个点的树的Prufer序列是经过下面流程得到的一个长度为n-2的序列。 1.若当前树中只剩下两个点,退出,否则执行2。 2.找到树中编号最小的节点,将与它相连的那个点的编号加入Prufer序列的末尾,并将这个叶子删除。返回1。 阅读全文
posted @ 2019-02-17 12:55 HocRiser 阅读(619) 评论(2) 推荐(0)
摘要:整体二分,就是对答案(权值)做CDQ分治。 有些问题会给出一些修改和一些询问,当可以通过二分后线性判定回答询问时,我们就可以将所有修改和询问放在一起二分,复杂度一般会将一个O(n)级别优化掉,这就是整体二分。 一般配合树状数组、线段树等数据结构,来替代树套树、KD-Tree等代码量和常数都较大的方法 阅读全文
posted @ 2019-02-03 08:23 HocRiser 阅读(214) 评论(0) 推荐(0)
摘要:有些题目,在要求支持link-cut之外,还会在线询问某个子树的信息。LCT可以通过维护虚边信息完成这个操作。 对于LCT上每个节点,维护两个两sz和si,后者维护该点所有虚儿子的信息,前者维护该点的所有信息和。 那么显然有:$si[x]=\sum sz[pson]$,$sz[x]=sz[lson] 阅读全文
posted @ 2019-01-22 09:26 HocRiser 阅读(1745) 评论(0) 推荐(0)
摘要:WQS二分,一种优化一类特殊DP的方法。 很多最优化问题都是形如“一堆物品,取与不取之间有限制。现在规定只取k个,最大/小化总收益”。 这类问题最自然的想法是:设f[i][j]表示前i个取j个的最大收益,转移即可。复杂度O(n^2)。 那么,如果在某些情况下,可以通过将问题稍作转化,变成一个不强制选 阅读全文
posted @ 2018-10-23 00:45 HocRiser 阅读(1792) 评论(0) 推荐(1)
摘要:DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法。 [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可。 tr[S][k]表示当前差分状压后的状态为S,加入字符k(k为ACGT中一个)后会转移到什么状态。 f[i][ 阅读全文
posted @ 2018-09-29 10:59 HocRiser 阅读(1380) 评论(0) 推荐(1)
摘要:首先看一个广义SAM的经典应用: BZOJ3277&BZOJ3473 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(包括本身)。 对于多串问题,普通SAM已经无法胜任。有各种应对这类多串问题的方法: (1) 直接建SAM,每次插入新串时将lst设为1即 阅读全文
posted @ 2018-09-03 19:50 HocRiser 阅读(3534) 评论(0) 推荐(3)
摘要:BSGS $Big\ Step\ Giant\ Step$,大步小步法,一种在$O(\sqrt{p})$内求解方程$a^x\equiv b (mod\ p)$的算法。 先考虑$p$为质数的情况。 令$x=im-j$,$m=\lceil \sqrt{p} \rceil$(注意是上取整,要保证大步比小步 阅读全文
posted @ 2018-07-03 17:41 HocRiser 阅读(453) 评论(0) 推荐(0)
摘要:Miller-Rabin素性测试算法: 根据费马小定理当p为素数时成立,所以如果存在一个a使x不满足此定理,则x必然不为素数。 但这是充分条件而不是必要条件,所以对于每个a,可能存在满足定理的x,这时就要选取多个a同时检测,这种验证素性的方法即为Miller-Rabin算法。 当a取2,3,5,7时 阅读全文
posted @ 2018-07-03 10:54 HocRiser 阅读(279) 评论(0) 推荐(0)
摘要:快一年了都没碰到什么必须用KDT的题目导致模板完全忘光了,重新复习了一下。 K_Dimention_Tree是一种用来处理二维以上问题的数据结构(OI中一般都是二维),本质是二维启发式估价函数实现剪枝(实际上就是暴搜的优化),随机数据是大常数$O(n\log n)$,构造数据是$O(n\sqrt{n 阅读全文
posted @ 2018-05-10 22:44 HocRiser 阅读(321) 评论(0) 推荐(0)
摘要:VFK的PPT堪称经典,迄今为止看过的最好的一篇,真的是体现出数学精妙。 主要就是各个方面的融汇贯通,涉及的知识有:复数,莫比乌斯反演,矩阵变换,微积分初步等。 直接进入正题。 转载请注明出处:http://www.cnblogs.com/HocRiser/p/8886806.html 目录: 一. 阅读全文
posted @ 2018-04-19 23:07 HocRiser 阅读(1405) 评论(1) 推荐(2)
摘要:一.斯特林数反演斯特林数反演相关内容:http://blog.csdn.net/OwenOwl/article/details/79442341 下降幂是指$x*(x-1)*(x-2)*...*(x-k+1)$,上升幂是指$x*(x+1)*(x+2)*...*(x+k-1)$ 接着我们考虑斯特林数反 阅读全文
posted @ 2018-03-20 20:57 HocRiser 阅读(656) 评论(0) 推荐(0)
摘要:花了点时间重新复习了一下各种博弈,下面总结一些常用的内容。 OI中的博弈游戏大部分都是组合博弈,游戏可以转换为有向无环图。 博弈论的题目一般分为两种:找规律直接O(1)出解,或通过结论等方法转换成经典博弈模型并用SG函数解决。 对于一道博弈论的题目,一般有这几种技巧: 1.手玩游戏并努力找到其中的规 阅读全文
posted @ 2018-03-17 12:30 HocRiser 阅读(783) 评论(0) 推荐(0)
摘要:学习动态点分治之前要先弄清楚点分治的原理,二者的应用范围的不同就在于动态的支持在线修改操作,而实现的不同就在于动态点分治要建点分树。 OI中有很多树上统计问题,这类问题往往都有一个比较容易实现的暴力做法,而用高级数据结构维护信息有显得过于复杂,有没有一种“优美的暴力”,能既保证思维的简单性,又有更高 阅读全文
posted @ 2018-03-04 19:34 HocRiser 阅读(523) 评论(0) 推荐(1)