10 2024 档案
摘要:定义 我们定义一个把字符串映射到整数的函数 \(f\) ,这个 \(f\) 称为是 Hash 函数。 我们希望这个函数 \(f\) 可以方便地帮我们判断两个字符串是否相等。 \(f\) 值域 在字符串哈希中,值域需要小到能够快速比较(\(10^9\)、\(10^{18}\) 都是可以快速比较的)。
阅读全文
摘要:[CF438D]The Child and Sequence 表面上要你实现线段树区间取模操作,实际上根据最大值优化掉不必要的取模操作再暴力取模即可。 [1982D]Beauty of the mountains ben推的数学题,运用裴蜀定理,即 \(ax+by=c,x \in \mathbb{Z
阅读全文
摘要:FHQ-Treap 一种无需旋转,只使用分裂、合并来维护一个Treap的方式。 参考blog: https://www.cnblogs.com/Judge/p/9506980.html https://www.cnblogs.com/TimelessWelkinBlog/p/17610065.htm
阅读全文
摘要:点分治 参考blog 点分治 是一种解决树上统计问题的常用方法,本质思想就是选择一点作为分治中心,将原问题划分为几个相同的子树上的问题,进行递归解决。 常见题目中给出的树都是无根树(所需维护的信息与根节点是谁无关)。 常见的用于统计树上有关路径的信息。假设当前选定根节点为 \(rt\) ,则符合条件
阅读全文
摘要:参考blog 矩阵加速优化 模板 #include <bits/stdc++.h> #define MAXM 3 using namespace std; struct Matrix{ int a[MAXM][MAXM]; Matrix() { memset(a,0,sizeof a); } Mat
阅读全文
摘要:左偏树 / 可并堆 更好地维护优先队列 详解blog 支持的操作: 堆的所有操作 Marge - 维护左偏性质 更快的合并 使用 pbds 库 头文件 ext/pb_ds/priority_queue.hpp 命名空间 using namespace __gnu_pbds 声明 __gnu_pbds
阅读全文
摘要:wqs二分 详解 wqs二分常用来解决如下问题: 给定若干 \(n\) 个物品,要求从中恰好选 \(m\) 次,最大化/最小化选的物品的权值和。 使用条件: 设 \(g(i)\) 选 \(i\) 个物品的最优方案,将所有 \((i,g(i))\) 的点画出来,必须组成一个凸包(上凸包、下凸包均可)。
阅读全文
摘要:补一发LCA。 LCA基本步骤 在有根树一棵树上,先将两点跳到相同的高度(deep),在一起向上跳,直到两点相遇。 倍增优化 倍增,按 \(2\) 的指数级别向上跳。 设 \(deep[u]\) 为点 \(u\) 的深度, \(fa[u][i]\) 为点 \(u\) 的 \(2^i\) 级祖先。 预
阅读全文
摘要:权值线段树 参考blog 与普通线段树的区别 普通线段树维护数列的区间信息 权值线段树维护桶的区间信息 设 \(T[x]\) 为数列 \(a\) 中 \(x\) 出现的个数。 权值线段树维护的是桶 \(T\) 。 建树/插入/查询 同普通线段树。 求整个数列的第 \(K\) 大/小值 假设 \(K=
阅读全文
摘要:重链剖分 参考blog:https://www.cnblogs.com/ivanovcraft/p/9019090.html 顾名思义,重链剖分就是将一颗有根树剖分成若干条重链,然后用数据结构维护这些重链的信息。 典型问题 对于一颗有根树有如下操作: 将树从x到y结点最短路径上所有节点的值都加上z
阅读全文