快速输入输出
使用前进行初始化 IO.init()
,在 freopen
后。
read()
读入int
,read<long long>()
读入long long
。read(a, b, c, ...)
write(a)
输出并换行,write(a, ' ')
输出并加空格。
1 | struct IO { |
自动取模类型 modint
实现同 AC Library
,文档。
1 |
|
NTT 系列
经典版
1 | const int P = 998244353; |
经典版 (modint)
1 | int ceil2(int n) { return n ? 2 << __builtin_ia32_bsrsi(n) : 1; } |
任意模数 NTT
1 | using cplx = complex<double>; |
任意模数 NTT (modint)
1 | using cplx = complex<double>; |
多项式求逆
1 | const int P = 998244353; |
多项式求逆 (modint)
1 | using mint = static_modint<998244353>; |
网络流
最大流
1 | const int N = /**/, M = /**/; |
最小费用最大流
1 | const int N = /**/, M = /**/, SZ = /**/; |
最小费用最大流 多路增广
1 | const int N = /**/, M = /**/, SZ = /**/; |
二分图匹配 增光路算法
1 | int n, m, vis[N], mat[N]; |
二分图匹配 Hopcroft–Karp
比网络流快,方案存于 mate
数组。
1 | const int N = /**/ + 8, M = /**/ + 8; |
数论相关
min25 筛 质数计数
1 |
|
exBSGS
1 | map<int, int> mp; |
cipolla
1 | int n; ll II; |
cipolla(modint)
1 | mint n, II; |
Miller Rabin & Pollard Rho 质因数分解
1 | vector<ll> prime; |
数据结构
pbds::tree
1 |
|
Treap
1 | struct { int l, r, s; } c[N]; |
可持久化 Treap
1 |
|
LCT
1 | struct { int c[2], f; bool r; } c[N]; |
LCT 维护 size
1 | struct { int c[2], f, s, si; bool r; } c[N]; |
图论
2-SAT 字典序最小解
1 | int n, m, co[N << 1], stk[N << 1], tp; |
字符串
后缀数组
1 |
|
后缀自动机
1 | char s[N]; |
manacher 求偶回文串
1 | for (int i = 1; i <= n; i++) { |
回文自动机
1 | char s[N]; |
偶回文自动机
1 | void ins(int i) { |
最小表示法
1 | int calc(char s[]) { |
最小后缀
1 | int calc(char s[]) { |
其他
10^18 级取模
1 | using ll = long long; |
bash 对拍
1 | # 保存为文件 pai |
过时的
扩展中国剩余定理
1 | ll mul(ll A, ll B, ll P) { |
虚树
1 | int n, a[N], p, stk[N]; |
K-D tree
定义
1 |
|
函数
1 | double sq(double x) { return x * x; } |
欧几里得距离平方
1 | ll sq(int x) { return 1ll * x * x; } |
曼哈顿距离
1 | int minm(int o, int x[], int re = 0) { |
切比雪夫距离
1 | int minc(int o, int x[], int re = inf) { |
最近点查询
定义
1 | ll res; |
函数
1 | void qry(int x[], int l, int r, int o) { |
初始化
1 | res = inf; |
最远点查询
定义
1 | ll res; |
函数
1 | void qry(int x[], int l, int r, int o) { |
初始化
1 | res = 0; |
矩形是否包含所有点
1 | int chk1(int l[], int r[], int o, int re = 1) { |
矩形是否可能包含点
1 | int chk2(int l[], int r[], int o, int re = 1) { |
圆是否包含所有点
1 | int chk1(int x[], int r, int o) { |
圆是否可能包含点
1 | int chk2(int x[], int r, int o) { |
待填
- 自然数等幂求和
- 中国剩余定理
- 杜教筛
- 拉格朗日插值