数据结构
并查集
1 |
|
BIT(树状数组)
1 | /* |
线段树
单点的更新维护
题目:求区间和
1 |
|
区间的更新维护
题目:求区间最大值
1 |
|
单调队列
1 | for(int i=0; i<(n<<1); i++) |
数论
组合数初始化
1 | C[0][0] = 1; |
矩阵快速冪
取模(数组实现)
1 | const int MOD = 998244353; |
不取模(Vector实现)
1 | typedef vector<int> vec; |
求组合数
1 |
|
1 | const int N = 200000 + 5; |
Lucas定理
代码未曾用过,正确性与否待测试
1 |
|
图论
Dijkstra算法
使用优先权队列优化
1 | struct edge |
A* 求第 K 短路
1 | using namespace std; |
Prim算法
1 | int cost[MAX_V][MAX_V]; |
Kruskal算法
1 | struct edge |
常用
离散化
1 | sort(a, a+tot); |
数位dp
1 | int dfs(int pos, int state, bool lead, bool limit) |
SG 函数 sg(x)=mex{sg(y) | y是x的后继 }
打表法
1 | //f[]:可以取走的石子个数 |
dfs 法
1 |
|
黑科技
杜教BM
1 |
|