算法基础之基础算法模板
基础算法模板
快速排序
1 | void quick_sort(int q[], int l, int r) |
归并排序
1 | void merge_sort(int q[], int l, int r) |
整数二分查找
1 | bool check(int x) {/* ... */} // 检查x是否满足某种性质 |
浮点数二分查找
1 | bool check(double x) {/* ... */} // 检查x是否满足某种性质 |
高精度加法
1 | // C = A + B, A >= 0, B >= 0 |
高精度减法
1 | // C = A - B, 满足A >= B, A >= 0, B >= 0 |
高精度乘低精度
1 | // C = A * b, A >= 0, b >= 0 |
高精度除以低精度
1 | // A / b = C ... r, A >= 0, b > 0 |
一维前缀和
1 | S[i] = a[1] + a[2] + ... a[i] // 前i项和 |
二维前缀和
1 | 第i行j列格子左上部分所有元素的和:S[i, j] |
一维差分
1 | 给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c |
二维差分
1 | 给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c: |
双指针算法
1 | for (int i = 0, j = 0; i < n; i ++ ) |
位运算
1 | 求n的第k位数字: n >> k & 1 |
离散化
1 | vector<int> alls; // 存储所有待离散化的值 |
区间合并
1 | // 将所有存在交集的区间合并 |
评论
Va