摘要:
介绍一种素数判定的方法: Miller-Rabbin素数测试 时间复杂度可以达到O(slogn)级别,s是测试次数,一般取在30次左右便已足够,因此这是一个logn级别的算法 首先根据费马小定理,当p是素数时有: /(a^{p-1}\equiv1(\mod p)/) 即 /(a^{p-1}\mod 阅读全文
摘要:
//树链剖分,线段树维护 #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[... 阅读全文
摘要:
树链剖分求LCA,首先需要处理以下几个数组: 树链剖分需要两次dfs,第一次求出father、son、size和dep数组,第二次求出top数组。然后再求lca即可。 附上代码: 代码注释版(用于理解): 阅读全文
摘要:
我们熟知的斐波那契数列递推公式是: \(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 阅读全文
摘要:
树状数组是用来维护序列前缀和的数据结构。它的修改与求和都是O(logn)的,效率非常高。 我们设序列为A,则树状数组c中,c[i]记录序列A的区间[ i-lowbit(i)+1 , i ]中所有数的和。 (树状数组是个好东西ovo) 树状数组在进行区间操作时,要从上到下访问,进行单点操作时,要从下到 阅读全文
摘要:
单点修改与查询 区间修改与查询 注意要使用标记下传来实现。 阅读全文