随笔分类 - 算法模板
摘要:https://blog.csdn.net/lj12358132134/article/details/80458349
阅读全文
摘要:#pragma GCC optimize(3,"Ofast","inline") View Code
阅读全文
摘要:RMQ 又叫 st表 跳表 本质是倍增动态规划 查询的时候,每次查询使用一个最大的k,使得2^k<=len(r-l+1) 然后找到[l, r]区间中前2^k和后2^k中的最大值,取最大 模板: const int N=200010; const int M=18;//2^M>200010 int n
阅读全文
摘要:利用归并排序统计逆序对的数量 int n; int nums[500010]; int backup[500010]; LL MergeSort(int l,int r) { if(l==r) return 0; int mid=(l+r)/2; LL res=MergeSort(l,mid)+Me
阅读全文
摘要:基于分治的思想: 例题:https://www.acwing.com/problem/content/99/ 模板: 求num^0+num^1+...+num^k const int MOD=9901; int QuickExp(int base,int exp) { base%=MOD; int
阅读全文
摘要:容斥原理的复杂度是2^n,一般n不会很大 形如: 由于容斥原理一共有2^n中选法,可以用二进制枚举,1表示选择某个条件。 然后将偶数个1的状态加起来,奇数个1的状态减去 例题: https://www.acwing.com/problem/content/216/ 莫比乌斯函数: 定义: 用于结合容
阅读全文
摘要:高斯消元求解n元线性方程组 原理 先变上三角,再变对角矩阵,则此时 右边的值就是方程的解 步骤: 模板:(n*n且保证有唯一解,即n个线性方程n个未知数且有唯一解) const int N=15; double A[N][N]; int n; void Gauss() { //A矩阵存储了系数和右端
阅读全文
摘要:卡特兰数的基本模型是,(0,0)->(n,n)且不越过x=y这条线 等价于另一个模型:01序列且全部前缀中0的个数都大于1,其中0对应于x方向移动,1对应y方向移动 例题:https://www.acwing.com/problem/content/1318/ 此题可以将一个1-n的前缀的选择(选择
阅读全文
摘要:模板: int primes[N],cnt; bool not_prime[N]; void Init() { for(int i=2;i<N;i++) { if(!not_prime[i]) { primes[cnt++]=i; for(int j=i+i;j<N;j+=i) { not_prim
阅读全文
摘要:lucus求解组合数的时间复杂度为 O(MODlogn(MOD)) 适用于MOD较小但n较大的情况 模板: LL MOD=1e6+3; LL QuickExp(LL base,LL exp) { LL res=1; while(exp) { if(exp&1) { res*=base; res%=M
阅读全文
摘要:LCP也可以用来进行一个字符串的子字符串的比较 需要预处理lcp[i][j]数组,表示从i开始的后缀和从j开始的后缀的最长公共前缀 lcp[i][j]可以从lcp[i+1][j+1]递推过来 O(n^2)预处理 O(1)查询 和字符串哈希相比,预处理较慢,但是更加准确 int lcp[4010][4
阅读全文
摘要:字符串哈希可以快速判断两个子字符串是否相等 O(n)预处理,O(1)判断 原理:https://www.cnblogs.com/ydUESTC/p/15722400.html 注意 字符串哈希时后面的字符视为低位,这样方便取一段字符的哈希时先做乘法再做减法。 例题:https://leetcode.
阅读全文
摘要:可以用快速幂的形式求大量的相同矩阵乘法。 1、快速幂求斐波那契数列的第n项(n很大) 先将斐波那契数列的递推转化成矩阵形式 然后用快速幂求解A^n 例题:求斐波那契数列的前n项和(n很大) 可以将上例的行向量变为Fn=(fn,fn+1,Sn),矩阵A变为{{0,1,0}, {1,1,1}, {0,0
阅读全文
摘要:注意这里是构造了一个解,ti由于Mi与mi互质,可以用ExGCD求解 例题:https://www.acwing.com/problem/content/1300/ 模板: #include<bits/stdc++.h> using namespace std; typedef long long
阅读全文
摘要:在求a*b%MOD的时候,如果MOD>1e10,则即便使用a%MOD*b%MOD,依旧有可能会爆long long 故可以利用和快速幂相似的思想,将乘法按位转化为加法,避免报long long 龟速乘模板: LL SlowMul(LL a,LL k,LL MOD) { LL res=0; while
阅读全文
摘要:拓展欧几里得算法: 1、模板:https://www.cnblogs.com/ydUESTC/p/16676229.html 2、原理: 3、应用:拓展欧几里得算法解线性同余方程: 4、例题: (1)线性同余方程: https://www.acwing.com/problem/content/205
阅读全文
摘要:例题: 1、求区间中的质数 筛质数是O(n)或O(nloglogn) 但是如果n很大,则会超时。 但是如果要筛[l, r]区间中的全部质数 且l和r比较大,但是r-l比较小时。 可以用O(nloglogn)的时间筛出,其中n=sqrt(N)。可以降低时间复杂度。 有对一个数n,如果是合数,则一定有小
阅读全文
摘要:AC自动机=Trie+kmp 优化:Trie图 1、kmp 长字符串s和模板串p都以下标1开始。 (1) 求next数组:kmp的next数组存的是p的自匹配,即以p[i]为结尾的后缀能够匹配的最长非平凡(不是自身)前缀。由于非平凡,next[0]=next[1]=0,循环从2开始。 (2)进行匹配
阅读全文
摘要:1、基本性质 tree+heap=treap 平衡树包含treap 红黑树 splay sbt AVL等等 splay比较常用 treap= ①BST 二叉搜索树 + ②heap 2、set不能做的操作 ⑤和⑥这种与排名相关的操作比较困难 3、treap的实现 思想:让二叉搜索树尽量变得随机(以大根
阅读全文
摘要:可持久化的前提:数据结构本身的拓扑结构不变 trie、线段树、树状数组、堆等都可持久化 平衡树(一般)需要左旋和右旋,不可持久化 可持久化希望将数据结构的全部修改记录下来(历史版本) 核心思想:只记录每一个版本与前一个版本不一样的地方 1、可持久化Trie 可以发现,绿线表示同一个点,但是下方的子树
阅读全文