板子
李发?
这个作者很懒,什么都没留下…
展开
-
线段树板子
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 1e6 + 10; int b[N], n, m; struct vv{ ll l, r, sum, lazy; }; vv tree[N*4]; //建树 inline void build(ll i, ll l, ll r){ tree[i].l = l, tree[i].r = r; if(l == r){ tree[i].sum原创 2022-04-08 21:57:35 · 105 阅读 · 2 评论 -
树状数组板子
#include<bits/stdc++.h> using namespace std; const int N = 5e5 + 10; #define lowbit(x) ((x) & (-x)) int tree[N], n, m; inline void update(int i, int x){ for(int pos = i; pos < N; pos += lowbit(pos)){ tree[pos] += x; } } inline int query(int n)原创 2022-04-08 21:56:18 · 82 阅读 · 0 评论 -
kmp板子
#include<iostream> #include<vector> using namespace std; const int N = 1e6 + 10; int Next[N]; string s1, s2; void get(string s) { int j = 0, k = -1; Next[0] = -1; while(j < s.size()) { if(k == -1 || s[j] == s[k]) { ++j; k++;原创 2022-04-08 21:53:30 · 246 阅读 · 0 评论 -
二分的记录
发现二分里面if表示else的那个 在升序找>= int l = 1, r = len2; while(l <= r){ int mid = (l + r) >> 1; f(d2[mid] >= target){ r = mid-1; }else{ l = mid+1; } } ans = l; 此时l代表了第一个>=target的下标 找第一个>target的数就是换成if(… > …) 降序找< int l = 1, r原创 2021-10-22 20:51:12 · 46 阅读 · 0 评论 -
最小生成树prim算法板子
最小生成树,也就是求图里面用n-1条边使得整个图连接起来的算法。 两种算法,一种是kusual, 另一种是prim。 两种算法都很简单。 kusual : 简单来说就是我们先把所有的边排序,然后从小到大选出n-1条边使得图相连。 那么就是用优先队列维护最小,用并查集维护是否在同一个集合就好。 prim:主要思想和迪杰斯特拉是一样的,每次找最小的,没有被找到过的那一个边对应的点,然后用这个点去更新其余边的最小值。只是这里记录的是最短路里面上一个点到当前点的值。 证明麻烦得很,总之应该是贪心。 总之前人发明的东原创 2021-09-02 23:44:40 · 190 阅读 · 0 评论 -
最短路迪杰斯特拉板子
这个算法是找单源最短路,思想就是找当前离起点最短的一条边去维护其余点的最短距离。 简单描述就是 a 能到b, b能到c, a能到c。那么对于a到c, 如果a到b再从b到c比a直接到c更短,那么就选则a-b-c,而不是直接选择a-c 。 算法就是不断找最小,然后维护。 模板: 邻接矩阵版本 #include<bits/stdc++.h> using namespace std; const int N = 1e4 + 10; const int inf = 0x3f3f3f3f; int G[N原创 2021-08-28 11:59:27 · 203 阅读 · 0 评论 -
简单快速排序板子
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<iomanip>; using namespace std; const int maxn = 1e5 + 10; int b[maxn]; int n; void qst(int l, int r) { if (l >= r) return; int tmp = b[l]原创 2021-07-25 12:56:41 · 91 阅读 · 0 评论 -
并查集板子
简单并查集板子 //并查集板子 const int maxn = 1e6 + 10; int fa[maxn]; inline void iit(int n) { for (int i = 0; i <= n; i++) fa[i] = i; } int findx(int x) { return (x == fa[x] ? x : (fa[x] = findx(fa[x]))); } void merge(int x, int y) { int f_x = findx(x), f原创 2021-07-23 18:51:30 · 101 阅读 · 0 评论