摘要:
Kruskal 重构树学习笔记 参考博客 链接 性质 这里给定最小生成树 Kruskal 重构树 的性质,那么最大生成树 Kruskal 重构树 的性质可以同理得。 重构树是一棵恰有 n 个叶子节点的完满二叉树,每个非叶子节点都有两个儿子,共有 2n−1 个点。(初始图中的 n 个点是叶子,由于是棵 阅读全文
摘要:
洛谷题单 算法2-3 字符串 KMP模板 使用前保证字符串下标从 \(1\) 开始。e.g. s="?"+s; template<class Type> struct KMP{ vector<int> init(Type s){ int n=(int)s.size()-1; vector<int> 阅读全文
摘要:
可持久化Trie--区间异或最值问题 应用:在 \(O(logn)\) 时间复杂度解决 查询区间 \([l,r]\) 内与数 \(x\) 异或的最大值。 插入操作:把 \(n\) 个整数插入 \(01Trie\),生成 \(n\) 个版本的可持久化树。 查询操作:利用前缀和与差分的思想,用两颗前缀 阅读全文
摘要:
P3369 【模板】普通平衡树 题目链接 您需要动态地维护一个可重集合 \(M\),并且提供以下操作: 向 \(M\) 中插入一个数 \(x\)。 从 \(M\) 中删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 查询 \(M\) 中有多少个数比 \(x\) 小,并且将得到的答案加一。 阅读全文
摘要:
洛谷题单 算法2-3 分治与倍增 P2345 [USACO04OPEN] MooFest G 树状数组 题目链接 思路: 让我们求所有两两之间 \(max(v_i,v_j)\times |x_i-x_j|\) 的值之和。 经典思路,考虑每个数对答案的贡献。对于每个数 \(v\),会产生所有比 \(v 阅读全文
摘要:
Atcoder Beginner Contest 380 题解 (A-G) 题目链接 A - 123233 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ string s; cin 阅读全文
摘要:
Atcoder Beginner Contest 379 (A-F) 题目链接 A - Cyclic #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ char a,b,c; cin> 阅读全文
摘要:
洛谷题单 算法2-2 常见优化技巧 单调栈 单调栈最经典的应用,就是在一个数列里寻找距离元素最近的比其大/小的元素位置。 模板题,寻找每个元素右边第一个比它大的元素下标。 stack<int> s; for(int i=n;i>=1;i--){ while(s.size()&&a[s.top()]< 阅读全文
摘要:
AtCoder Beginner Contest 378 题解 比赛链接 A - Pairing 贪心 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ vector<int> a(5 阅读全文
摘要:
对顶堆动态维护第k大的值。 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ int n,w; cin>>n>>w; priority_queue<int,vector<int>,gr 阅读全文