摘要: 介绍一种素数判定的方法: Miller-Rabbin素数测试 时间复杂度可以达到O(slogn)级别,s是测试次数,一般取在30次左右便已足够,因此这是一个logn级别的算法 首先根据费马小定理,当p是素数时有: /(a^{p-1}\equiv1(\mod p)/) 即 /(a^{p-1}\mod 阅读全文
posted @ 2019-05-09 14:42 Black_Gzombie 阅读(510) 评论(0) 推荐(0) 编辑
摘要: //树链剖分,线段树维护 #include #include #define maxn 300500 #define INF 0x3f3f3f3f using namespace std; int n,m; int head[maxn],cnt; int dep[maxn],son[maxn],siz[maxn],fa[maxn]; int top[maxn],seg[maxn],rnk[... 阅读全文
posted @ 2019-05-08 00:29 Black_Gzombie 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 树链剖分求LCA,首先需要处理以下几个数组: 树链剖分需要两次dfs,第一次求出father、son、size和dep数组,第二次求出top数组。然后再求lca即可。 附上代码: 代码注释版(用于理解): 阅读全文
posted @ 2019-05-08 00:28 Black_Gzombie 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 我们熟知的斐波那契数列递推公式是: \(f(n)=f(n-1)+f(n-2)\) 假设我们需要求斐波那契数列的第n项,当n非常大(如n=1e9)的时候,递推肯定超时。我们不妨设: \(\binom{f_{n}}{f_{n-1}}=\begin{pmatrix}a & b\\ c & d\end{pm 阅读全文
posted @ 2019-05-08 00:12 Black_Gzombie 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 树状数组是用来维护序列前缀和的数据结构。它的修改与求和都是O(logn)的,效率非常高。 我们设序列为A,则树状数组c中,c[i]记录序列A的区间[ i-lowbit(i)+1 , i ]中所有数的和。 (树状数组是个好东西ovo) 树状数组在进行区间操作时,要从上到下访问,进行单点操作时,要从下到 阅读全文
posted @ 2019-05-08 00:05 Black_Gzombie 阅读(803) 评论(0) 推荐(0) 编辑
摘要: 单点修改与查询 区间修改与查询 注意要使用标记下传来实现。 阅读全文
posted @ 2019-05-08 00:02 Black_Gzombie 阅读(1386) 评论(0) 推荐(0) 编辑
摘要: 简介 ST表是利用倍增思想处理RMQ问题(区间最值问题)的一种工具。 它能够做到O(nlogn)预处理,O(1)查询的时间复杂度,效率相当不错。 算法 1.预处理 ST表利用倍增的思想。以洛谷的P3865作为例子。我们需要查询某一区间的最大值。 我们用f[ i ][ j ]表示区间i到i+2^j-1 阅读全文
posted @ 2019-05-07 23:53 Black_Gzombie 阅读(340) 评论(0) 推荐(0) 编辑
摘要: SPFA算法最短路(即Bellman-Ford队列优化) dijkstra堆优化: 阅读全文
posted @ 2019-05-07 23:51 Black_Gzombie 阅读(244) 评论(0) 推荐(0) 编辑