合集-算法模板
摘要:bool op[2]={false,true}; void dfs(int a,int b) { if(.....)return; for(int i=0;i<2;i++) { if(op[i])..... dfs(a,b+1); } }
阅读全文
摘要:单调栈 用于求解数组每个位置上左边/右边离自己最近的且严格小于/大于自己位置上的数的位置 时间复杂度O(N)(每个元素下标进栈一次出栈一次) 元素下标能表示的含义比元素本身要多 (ps:注意数组长度,过大就要开到全局变量中,否则异常退出orz) 方法(求每个位置上离自己最近且严格小于自己的元素位置(
阅读全文
摘要:#include <iostream> #include<vector> using namespace std; const int maxn=2e5+5; vector<int>graph[maxn];//邻接表 void addedge(int u,int v) { graph[u].empl
阅读全文
摘要:测试链接:https://leetcode.cn/problems/sort-an-array/ 堆结构: 是一颗完全二叉树 分为大根堆和小根堆 大根堆:每一颗子树最大值都在子树的根部 小根堆:每一颗子树最小值都在子树的根部 每一位父亲i的两个孩子的节点位置(若存在)分别为:i*2+1,i*2+2
阅读全文
摘要:题目链接: https://leetcode.cn/problems/longest-common-subsequence/ TLE 暴力递归+记忆化版本(基于字符串长度无优化版本)//注意text1[i1-1]==text2[i2-1] class Solution { public: int d
阅读全文
摘要:用于解决 范围数字和 与 单点增加 问题(复杂度O(logn)) build 方法(构造树状数组) void build(){ for(int i=1,v;i<=n;i++){ cin>>v; add(i,v); } } lowbit方法 (获取一个二进制数最低位的1的状态) int lowbit(
阅读全文
摘要:按位异或运算:相当于二进制不进位加法 按位和运算:二进制 进位处为1 按位或运算:二进制 进位处为1且不进位 (a|b)+(a&b)==a+b a^a==0 a^b=c => a^c=b (aba=a^c => b=a^c )按位异或运算的自反性 由于位运算优先级,每个位运算都尽量要加括号 譬如^运
阅读全文
摘要:节点结构(维护区间和与最大值,最小值) struct node{ int l; int r; int sum; int maxn; int minn; }; const int maxn=1e5+5; int arr[maxn]; node tree[maxn]; build方法 void buil
阅读全文
摘要:build方法(注意将节点编号cnt初始化为1) int cnt; const int maxn=1e6+5; int trie[maxn][26]; int pass[maxn]; int last[maxn]; void build(){ cnt=1; } insert方法(向字典树中插入一个单
阅读全文
摘要:两种操作时间复杂度O(logn),空间复杂度O(n) build方法 const int maxn=5e5+5; int n,m; int s[maxn]; void build(){ rep(i,1,n){ int x;cin>>x;change(i,x); } } lowbit方法(求x的最低位
阅读全文
摘要:
阅读全文
摘要:ST 表用于 查询 静态数组 区间最大值,最小值 f[i][j]代表以i开头,区间长度为pow(2,j)的区间最大值/最小值 其左端点为i,右端点为i+ (1<<j) -1 运用倍增的思想,转移方程 f[i][j]=max(f[i][j-1],f[i + (1<<j-1)] [j-1]) 将该区间
阅读全文
摘要:扩欧: 用于求 不定方程 的 一组 整数解 通解形式: x=x0+b/gcd(a,b) y=y0-a/gcd(a,b) ax+by=gcd(a,b)时 求特解的方法 int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b); } int ex
阅读全文
摘要:求 a^b (modp) 时间复杂度O(logn) 符合结合律 (一个整数n,二进制位数为 logn+1) int quickpow(ll a,int b,int p){ int res=1; while(b){ if(b&1) res=res*a%p; a=a*a%p; b>>=1; } retu
阅读全文
摘要:同余式 若 a%m = b%m 则 表示为 a 模等于(三条杠latex不会打) b (mod p) 乘法逆元 若a,b互质,且 a*x 模等于 1 (mod b) 那么称x为a 模 b 的乘法逆元 费马小引理 若p为质数,且a,p互质,那么 a^(p-1) 模等于 1 (mod p) 即a^(p-
阅读全文
摘要:用于求 矩阵A^k 的问题(其中A为n行n列的矩阵) 1.快速求解fibonacci第n项 (n>3时,[f[n],f[n-1]]=[f[2],f[1]]*A 其中矩阵A.c[1][1]=A.c[1][2]=A.c[2][1]=1,A.c[2][2]=0) matrix结构体 int n; stru
阅读全文
摘要:1.整数唯一分解定理 任意正整数都可以表示为其质因子的乘积 注意1不是质数,因此一定不是质因子 一个数本身也不是其质因子,除非它是质数 发现一个数的约数个数有以下公式 s=(a1+1)(a2+1)····(ak+1) 其中ai为第i个质因子的幂次 然而质因数和约数是不同的概念,约数可以是合数 2.任
阅读全文
摘要:素数筛:筛取1~n范围内的素数 埃氏筛 时间复杂度O(nloglogn) vector<int>prim; bool vis[maxn]; void e(int n){ rep(i,2,n){ if(!vis[i]){ prim.pb(i); for(int j=i*i;j<=n;j+=i)vis[
阅读全文
摘要:欧拉定理: 若a与m互质,那么a^phi(m) 与 1 在模m的意义下 同余 其中phi(m)为欧拉函数; 表达式phi(m)=m*(求和)((pi-1)/pi)(pi为m的因数) 扩展欧拉定理: 用于降幂 当b<phi(m)时 ,a^b 与 a^b 在 模m意义下 同余 当b>=phi(m)时,a
阅读全文
摘要:Kahn算法 (判环,输出拓补序列) 时间复杂度O(n+e) int n,m; vector<int>e[105];//邻接表 vector<int>tp;//拓扑数组 int din[105];//入度表 bool toposort(){ queue<int>q; rep(i,1,n) if(di
阅读全文