板子
李发?
这个作者很懒,什么都没留下…
展开
-
线段树板子
#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 · 106 阅读 · 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 · 84 阅读 · 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 · 247 阅读 · 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 · 48 阅读 · 0 评论 -
最小生成树prim算法板子
最小生成树,也就是求图里面用n-1条边使得整个图连接起来的算法。两种算法,一种是kusual, 另一种是prim。两种算法都很简单。kusual : 简单来说就是我们先把所有的边排序,然后从小到大选出n-1条边使得图相连。那么就是用优先队列维护最小,用并查集维护是否在同一个集合就好。prim:主要思想和迪杰斯特拉是一样的,每次找最小的,没有被找到过的那一个边对应的点,然后用这个点去更新其余边的最小值。只是这里记录的是最短路里面上一个点到当前点的值。 证明麻烦得很,总之应该是贪心。总之前人发明的东原创 2021-09-02 23:44:40 · 196 阅读 · 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 · 206 阅读 · 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 · 92 阅读 · 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 · 104 阅读 · 0 评论