数学 - 二次剩余
二次剩余即模意义开根,当模数为奇素数时,用 Cipolla 算法利用扩域的思想进行求解。
数学 - BSGS
BSGS 算法即大步小步算法是利用分块与哈希表,在根号的复杂度求解离散对数问题的算法。
杂项 - 主定理及证明
分析递归的时间复杂度时通常需要用到主定理,我之前一直当作黑盒去用它,但是越来越想了解一下这个定理是如何证明的,发现证明过程只用到了等比级数与对数的相关公式,这里记录一下。
杂项 - CDQ 分治
CDQ 分治是一种用来解决点对相关问题的思想,可以让一个偏序条件变成 0/1 条件,最终将满足一个条件元素的贡献到满足另一个条件的答案中,从而达到降低问题维度的目的。
数据结构 - 左偏树
左偏树是一种二叉树,它具有堆的性质,支持动态合并两颗左偏树,保持新树仍然满足左偏树的性质,并且合并两颗树的复杂度是 O(log(n)),同时用并查集维护堆顶,不会增加复杂度。
数学 - 中国剩余定理 CRT
中国剩余定理是用来合并同余方程组的算法,当满足模数两两互质时有一种巧妙的构造解的方法,当不满足模数互质时同样可以通过两两合并的方式得到最终解。
杂项 - 莫队
莫队算法是利用平衡复杂度的思想来优化暴力算法,通常是通过均值不等式求出一个最优复杂度。
数据结构 - Link Cut Tree
简介
LCT 利用 Splay 对树进行虚实链剖分,同一实链上的结点处在同一个 Splay 中,排序的关键字是深度。因此 Splay 的中序遍历就是树的从上到下的有序的树链。虚边是只记录父结点,父结点不记录子结点。介绍一下几个重要函数。
isroot(x)
判断 xxx 是否为根,只需要判断 fa(x)fa(x)fa(x) 是否含有 xxx 的指针即可。
123bool isroot(int x) ...
图论 - 线段树优化建图
简介
当涉及区间之间的连边操作时,可以考虑使用线段树优化建图,首先建立线段树,让父结点指向子结点或相反,边权为零,然后就会发现无论是最短路还是连通性,都与原图无区别。
[CF786B] Legacy
在宇宙中一共有 nnn 个星球标号为 1∼n1 \sim n1∼n。Rick 现在身处于标号为 sss 的星球(地球)但是他不知道 Morty 在哪里。
众所周知,Rick 有一个传送枪,他用这把枪 ...
数据结构 - Kruskal 重构树
一句话说明,在 Kruskal 算法中的并查集合并两点所在连通块这一步,新建一个虚点并将左右连通块代表点经过虚点连接起来,用二叉树的结构记录并查集的合并顺序即加边顺序。