合集-学习笔记
摘要:插板法 问题一:现有 个 完全相同的元素,要求将其分为 组a,保证每组至少有一个元素,一共有多少种分法? 考虑拿 块板子插入到 个元素两两形成的 个空里面。 所以答案就是 问题二:如果问题变
阅读全文
摘要:一种离线处理方法 可以处理“具体哪个修改对询问有影响”、可以贡献不独立、可以支持插入删除。 例题 对这道题来说,对修改开线段树,线段树上每个节点开一个 来维护出现在这段区间的线段,加入一个线段的区间,直接在区间查询时对所包含的节点压入这条线段就可以。 然后从根节点递归,先左子树
阅读全文
摘要:拉格朗日插值 就像三个点可以确定一个二次函数,呢么 个点可以确定一个 项式。 问题:给定 个点以及对应的函数值,求 。 高斯消元的复杂度 ,拉格朗日插值可以 解决这个问题 表达式:\(f(x)=\sum\li
阅读全文
摘要:二分图最大匹配: 定义:给定一个二分图 ,即分左右两部分,各部分之间的点没有边连接,要求选出一些边,使得这些边没有公共顶点,且边的数量最大。 方法:Dinic 二分图的最小顶点覆盖 定义:假如选了一个点就相当于覆盖了以它为端点的所有边。最小顶点覆盖就是选择最少的点来覆盖所有的边。 定理:图
阅读全文
摘要:感觉可以理解为带修点分治。 常用于解决与树原形态无关的带修改问题。 —— oi-wiki 点分树是通过更改原树形态使树的层数变为稳定 的一种重构树。就是通过点分治找重心的方式,将这一层重心为上一层重心的儿子。 所以对于很多暴力的复杂度是正确的。 一开始发现建树错了,然后发现是原
阅读全文
摘要:最大流 code int head[N],nex[N*N*8],ver[N*N*8],edge[N*N*8],tot=1; void add(int x,int y,int v){ ver[++tot]=y,nex[tot]=head[x],head[x]=tot,edge[tot]=v; ver[
阅读全文
摘要:后缀排序 倍增+基数排序 code bool cmp(int x,int y,int k){ // 常数优化,使访问连续 if(oldrk[x]==oldrk[y] && oldrk[x+k]==oldrk[y+k]) return 1; else return 0; } void get_sa()
阅读全文
摘要:杜教筛 处理数论函数的前缀和问题,可以在低于线性的复杂度里求出 。 对于任意一个数论函数 ,必须满足 : \[\sum_{i=1}^{n}(f*g)(i)=\sum_{i=1}^{n} \sum_{d \mid i} g(d)*d(\
阅读全文
摘要:二项式反演 证明 我们设 为任意 个集合的交集的大小, 表示任意 个集合补集的交集大小。 首先有 (组合数学6.2) \[|\overline{S_1}\cap\overline{ S_2}\cap...\cap \overline{S_{
阅读全文
摘要:笛卡尔树是一种二叉树,每一个节点由键值二元组 构成, 满足二叉搜索树的性质, 满足堆的性质。 构建 我们可以用一个栈进行构建,假如我们想要求 满足二叉搜索树的性质,那么我们首先需要按 从小到大排序,然后一个一个插入;假如我们想要 \
阅读全文