摘要:
快速读入 可以根据题目描述自行修改。 void Init() { char ch; ch = getchar(); while (ch < 'A' || ch > 'Z') ch = getchar(); while (ch >= 'A' && ch <= 'Z') { A[++lena] = ch 阅读全文
posted @ 2021-06-29 15:58
EdisonBa
阅读(59)
评论(0)
推荐(0)
摘要:
前言 这篇博客我自认为写的非常清楚,不需要任何基础,只要会 \(\text{C++}\) 语言基础即可学懂。 任何一个地方我都没有默认已经学过了,完全从 \(0\) 开始的 \(\text{FHQ−Treap}\) 教学! 好耶!我们开始吧!ヽ(✿゚▽゚)ノ 哒哒哒哒哒! FHQ-Treap \(\ 阅读全文
posted @ 2021-06-29 11:34
EdisonBa
阅读(126)
评论(0)
推荐(0)
摘要:
Tarjan B3609 [图论与代数结构 701] 强连通分量 std::vector<int> t[maxn]; //vector 存图 std::vector<int> SCC[maxn]; std::stack<int> stk; int n, m, tot, cnt; int vis[ma 阅读全文
posted @ 2021-06-29 10:44
EdisonBa
阅读(43)
评论(0)
推荐(0)
摘要:
ll ans[100] ,cnt; //拓扑序列及其元素个数 ll deg[100]; //所有点的入度 void topsort() { queue<ll> q; for (int i = 1; i <= n; ++i) if (deg[i] == 0) //寻找最开始入度就为0的点 q.push 阅读全文
posted @ 2021-06-29 10:41
EdisonBa
阅读(51)
评论(0)
推荐(0)
摘要:
Kruskal 前置:并查集 struct node { ll u, v, w; } t[200005]; ll fa[200005], n, m, ans, eu, ev, cnt; inline bool cmp(node a, node b) { return a.w < b.w; } inl 阅读全文
posted @ 2021-06-29 10:40
EdisonBa
阅读(31)
评论(0)
推荐(0)
摘要:
P3379 【模板】最近公共祖先(LCA) 邻接表存图。 struct node{...}; void add(...){} ll dep[500010], fa[500010][23]; ll head[500010], tot; ll n, m, s; ll dep[N], fa[N][25]; 阅读全文
posted @ 2021-06-29 10:37
EdisonBa
阅读(54)
评论(0)
推荐(0)
摘要:
介绍 我们遇到一些有 \(n\) 个元素的集合应用问题中,当给出两个元素的一个无序对 \((a,b)\) 时,需要快速合并 \(a\) 和 \(b\) 分别所在的集合,并查集就是这样的用于处理分离集合的抽象数据类型。它的作用就是动态地维护和处理集合元素之间的复杂关系。 ### 操作 使用并查集应首先 阅读全文
posted @ 2021-06-29 10:36
EdisonBa
阅读(156)
评论(0)
推荐(0)
摘要:
SPFA SPFA能处理负边权,可以判断负环。也可以求最长路。 最短路 #include <queue> queue<int> q; void SPFA(int s) { fill(dis + 1, dis + 1 + n, 2147483647); //初始边无限大 memset(vis, 0, 阅读全文
posted @ 2021-06-29 10:29
EdisonBa
阅读(38)
评论(0)
推荐(0)
摘要:
Luogu-CF1365A 题目分析 如果当前玩家想要在网格图上找一个位置设置为 \(1\),条件式这一个位置所在的行以及列上都没有其它的 \(1\)。 观察到数据范围只有 $1 \leq n,m \leq 50 $,我们可以考虑直接在网格图上操作。 在读入的时候,只要读入到当前位置的数为 \(1\ 阅读全文
posted @ 2021-06-29 10:22
EdisonBa
阅读(71)
评论(0)
推荐(0)
摘要:
求单源 \(s\) 到任意一点的最短路径。最短路径保存在数组 dis 中。 链式前向星 #include <queue> priority_queue<pair<ll, ll>> q; void dijkstra(int s) { memset(dis, 0x3f, sizeof(dis)); // 阅读全文
posted @ 2021-06-29 10:20
EdisonBa
阅读(25)
评论(0)
推荐(0)
摘要:
vector 存图 struct node{ ll to, w; }; vector<node> t[maxn]; void add(const int u, const int v, const int w) { t[u].push_back((node){v, w}); } 链式前向星存图 如果 阅读全文
posted @ 2021-06-29 10:18
EdisonBa
阅读(113)
评论(0)
推荐(0)
摘要:
01背包 最大价值 背包数量为 \(V\),有 $n$件物品,重量为 \(w_i\),价值为 \(c_i\)。求能获得最大价值。 ll V, n, w[10000], c[10000], f[10000]; int main() { V = read(); n = read(); for (int 阅读全文
posted @ 2021-06-29 10:15
EdisonBa
阅读(52)
评论(0)
推荐(0)
摘要:
LCS 操作对象:两个长度不一定相等的字符串。 例题 string s, t; int f[maxn][maxn]; int main() { cin >> s >> t; int ls = s.length(), lt = t.length(); for (int i = 1; i <= ls; 阅读全文
posted @ 2021-06-29 10:13
EdisonBa
阅读(43)
评论(0)
推荐(0)
摘要:
二分 求一个序列的最长上升子序列个数。 本程序采用边读边处理 + 二分法。 ll f[maxn], ans = 1; //注意答案个数初始化为1 int main() { ll n = read(); for (int i = 1; i <= n; ++i) { int x = read(); if 阅读全文
posted @ 2021-06-29 10:11
EdisonBa
阅读(154)
评论(0)
推荐(0)
摘要:
使用前提:数列为有序数列。 ①数组内 //查找范围:[ begin , end ) ,左闭右开区间。 *lower_bound(begin, end, num); //返回第一个 >= num 的数的数值 lower_bound(begin, end, num) - begin; // 返回下标 实 阅读全文
posted @ 2021-06-29 10:07
EdisonBa
阅读(759)
评论(0)
推荐(0)
摘要:
快速乘法取余 给定三个整数 \(a,n,mod\) ,求 \(a \times n ~\%~mod\) 的值。 inline int mult_mod(int a, int n, int mod) { int ans = 0; while (n > 0) { if (n & 1) ans = (an 阅读全文
posted @ 2021-06-29 10:04
EdisonBa
阅读(54)
评论(0)
推荐(0)
摘要:
最大公约数 ① 标准 inline int gcd(int a, int b) { int r; while (b > 0) { r = a % b; a = b; b = r; } return a; } ② 位运算 inline int gcd(int a, int b) //a,b不能为0 { 阅读全文
posted @ 2021-06-29 10:03
EdisonBa
阅读(120)
评论(0)
推荐(0)
摘要:
给定一个整数 \(n\) ,求出 $[2,n] $ 之间的所有素数。 prime 数组存放已经筛出的素数, \(m\) 代表素数个数(也就是说遍历时从 \(1\) 遍历到 \(m\) 即可),v 数组代表有没有被标记,避免重复筛。 int v[maxn], prime[maxn], n, k, t, 阅读全文
posted @ 2021-06-29 10:01
EdisonBa
阅读(34)
评论(0)
推荐(0)
摘要:
珂朵莉树 神奇的暴力数据结构 例题 \(n\) 个数,\(m\) 次操作 \((n,m≤105)\) 操作: 区间加 区间赋值 区间第k小 求区间幂次和 数据随机,时限 \(2s\)。 关键操作:推平一段区间,使一整段区间内的东西变得一样。保证数据随机 #include <set> #include 阅读全文
posted @ 2021-06-29 09:59
EdisonBa
阅读(74)
评论(0)
推荐(0)
摘要:
Treap 您需要写一种数据结构,来维护一些数,其中需要提供以下操作: 插入 \(x\) 数 删除 \(x\) 数(若有多个相同的数,因只删除一个) 查询 \(x\) 数的排名(排名定义为比当前数小的数的个数 \(+1\) ) 查询排名为 \(x\) 的数 求 \(x\) 的前驱(前驱定义为小于 \ 阅读全文
posted @ 2021-06-29 09:58
EdisonBa
阅读(43)
评论(0)
推荐(0)
摘要:
左偏树 一开始有 \(n\) 个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作: 1 x y:将第 \(x\) 个数和第 \(y\) 个数所在的小根堆合并(若第 \(x\) 或第 \(y\) 个数已经被删除或第 \(x\) 和第 \(y\) 个数在用一个堆内,则无视此操作)。 2 x:输出 阅读全文
posted @ 2021-06-29 09:57
EdisonBa
阅读(40)
评论(0)
推荐(0)
摘要:
树状数组 支持单点修改,区间查询。 ll lowbit(ll x) { return x & (-x); } ll c[500002], n, m; void add(ll x, ll y) //单点修改 { for (; x <= n; x += lowbit(x)) c[x] += y; } l 阅读全文
posted @ 2021-06-29 09:54
EdisonBa
阅读(34)
评论(0)
推荐(0)
摘要:
单调队列 例题1 有一个长为 \(n\) 的序列 \(a\),以及一个大小为 \(k\) 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 ll n, k, cnt = 0; ll ans[2][1000005]; struct node { ll sum 阅读全文
posted @ 2021-06-29 09:53
EdisonBa
阅读(47)
评论(0)
推荐(0)
摘要:
ST表 静态查询区间最值。 P3865 【模板】ST 表 ll f[100001][20]; ll n, m, a[100001]; void ST_make() { for (int i = 1; i <= n; ++i) f[i][0] = a[i]; ll t = log(n) / log(2 阅读全文
posted @ 2021-06-29 09:49
EdisonBa
阅读(55)
评论(0)
推荐(0)

浙公网安备 33010602011771号