记录(6)
One Item Away
uoj
想办法拆开 \(A_l^A_r\) 进入线性基的查询:等于 \(A_l\) 最大值 \(^\) \(A_r\) 最小值。证明:先假设线性基是最简型,对每一位独立,分讨
Desant 2
模拟赛
T1
1.答案不超过 \(n+1\)。
2.考虑什么时候能够取到 \(n\),则每一行都恰好经过一次,且必须左右来回横跳。
3.那么每个轮换环都是偶数,当 \(n\) 是奇数时显然无解。
4.但是还不充分。
5.在折线图中看,如果存在分割线(\(1...i\) 的最小值 \(> i+1...n\) 的最大值),那么走出一个块后无法返回,因此只能在块内走,因此每一块都得是偶数。
6.如果 \(p_1<p_n\),那么可以构造:先从 \(1...n\),途径每一对数,先走较小的那个,走到 \(n\) 后再返回 \(1\)。
7.否则,只需要找到一条从 \(n\) 返回 \(1\) 的路径,就一定能够构造。并且路径长度一定是偶数。
8.贪心,向下的话就选下面最靠左的,让下一步有最多可能。
9.可以证明这样一定能构造出。
10.只需证明无环。
11.如果有环,那么可以推出存在分割线,矛盾。


走出的路径形如两条从右下到左上的阶梯。
做法1:直接按照贪心跳到下一个位置,一定不会走出环,维护前后缀min/max。做法2:维护最右边还没走过的点和最下边还没走过的点。
T2
三维问题:花 2log 降其中两维,最后一维扫描线。因此复杂度不会低于 2log。
标记永久化的线段树可以不需要pushup和pushdown:核心:在较浅处贡献
T3
将答案表示为二元生成函数,那么存在封闭形式。
Desant 2
排成 \(k*(n/k)\) 的矩形,转移边连上去,那么相当于多次求这样一个图上的最短路。这是典,对短轴分治,复杂度单根号。
Perfect Suika Game on a Tree
不变量:\(\sum 2^{a_i}\)。(很类似 POI跳)
充要
可持久化ds维护
One Item Away
调整:没法拆集合,因为一旦拆出一个新的集合,这个集合都要重新问一次。拆集合是不好的,exchange 两个集合是好的。
增量。
如果 \(i\) 相比与 \(S_i\) 更倾向与 \(S_j\),连边 \(i\to j\)。如果一个点有入边,那么绝对不能把新加的数分给 \(i\),因为交互库可以搞 \(j\)。因此分给一个没有入度的点才是安全的。假设所有点都有入度,那么一定能找到一个环,将环整个轮换,这样不断调整下去。每次调整边数减少,总次数不会超过 \(nm\),单次调整复杂度至少是 \(n^2\),因此 \(O(n^3m)\)。
n^2m 不会
边 \(k\) 联通具有传递性 划分等价类
割:两种定义
两个割的异或还是割
割空间:2^m 01串 维度:\(n-1\)(由长度为n的01串生成)
环空间:选一些边,满足每个点都是偶数
基分别是什么
维度:\(m-n+1\)。\(n\) 个方程 \(m\) 个未知数,浪费了一个维度
割空间和环空间互为正交补。(两两垂直)
垂直(正交)(\(F_2\)):popcount(x&y)%2=1
缩叶子缩二度点:\(m/n~3/2\)
不弱于多次询问求两个点最段路。
考虑 separator+分治
缩广义串并联图会得到一个toptree
toptree是二叉树,因此可以进行边分治,选max(n-sz,sz)最大的一条边,作为一个separator,对两部分分别递归,最大不超过 \((2/3)n\)

这个题要算两两最短路和
继续递归下去一路checkmin会导致变成多维
直接加一条sep~边
二分图博弈
增广:一条虚边一条实边,相当于到下一个点继续匹配
判断一个点是否不在最大匹配里只需要删掉这个点再尝试增广一次
flow
维护 \(h_u\)
ek增广 \(h\) 基本上可以复用 除了加入的反边 让 \(h\) 加上 dis 之后即可满足,对于其他边将两个累加后也满足 初始spfa求\(h\)
Draw in straight lines
横着的竖着的线段去覆盖,不好贪心或者怎么做,直接考虑网络流。
直接应用切糕模型,每个点建三个变量表示染
最后要黑白染色,把一边的变量翻转,处理 \(+b\)
最短路等于对偶图最小割
对偶图:旋转90度

网络流不可能一条边正反流两次
模拟赛
T2
假设加入边为 \((u,v)\),选择的点对为 \((x,y)\),能够节省的边数为:
- \(|D(u,v)\Delta D(x,y)|+(0/2)\) 如果 \(D(x,y)\) 和 \(D(u,v)\) 有交再 \(+2\)。
TEST_176
平衡树有交合并 只需要保证合并复杂度是 \(O(连续段数)\)
势能: \(\sum \log(x_{i+1}-x_i)\)
Choiri
FWT 数组每一项只可能是 \(0/2^m\) \(s\) 项为 \(2^m\) 等价于所有 \(a_i\) 都满足 \(2||a_i\cdot s|\)。
\(s\) 构成的线性空间恰好是 \(\{a_i\}\) 的线性空间的正交补空间。维度 \(n-m\)
枚举非主元位的值,主元位可唯一确定
或者有算法可以直接求出正交线性基(正交补空间的一组基)
并查集线段树化:
建虚点,建成一个 leafy 的二叉树。这样的结构就能支持 pushup 以及打标记、pushdown,在回退时再将相应的结点 pushdown。最后信息都被下放到了每个点上。可以当成一个线段树。
线段树分治,把挂在当前结点上的边作为加入时间为 \(r\) 的边加入。
Sakura no Mahou
直接做也能做。有深刻做法。
相当于,进行若干轮,每一轮,每个数可以选择是否加上它前面那个数,从左到右依次决策。
考虑逆过程。相当于每一轮,每个数可以决策是 \(a_i\) 还是 \(a_{i-1}+a_i\),每个位置独立。

如果一个位置可以变为 \(1\),则将其变为 \(1\) 一定是不劣的。
10x -> 11x -> ....
10x -> 10x -> 11x/10x
第二种决策在第二步被第一种完全包含。
因此,如果不能结束,贪心地将一个位置变 1 是最优的。
Yin-Yang Two Bits Insertion
考虑差分数组,相当于 x -> 1x1
0 的个数是不变量,判掉 \(S,T\) 不相等。那么按 0 分段,相当于选择 \(a_i>0\) +=2,或者 \(a_i,a_{i+1}\) ++
第二种操作在一个位置上最多 \(2\) 次,dp。
Zonal Score Maximization
前面的转化很无聊。
方法1
列矩阵。转移是左乘 \(2\time 2\) 矩阵。
方法2
分治,记录左右端点状态。
AND Permutation
首先意识到这是一个二分图匹配。
匹配相关,要么考虑贪心,这里不行,所以考虑直接构造。
归纳,只要时刻保持不破坏题述条件,也就保证一直有解。
按位构造,按照最高位分为两个集合 \(S,T\),对 \(S,T\) 分别构造,但是要求 \(T\) 内部不能有连边,将 \(T\) 和 \(S\) 的出边进行一个 swap 即可。
Lazy Judge
能做的事情很有限。
维护一些 pair 和 triple,表示 \(v\) 一定是 \(x,y\) 某个,或者 \(v,v+1\) 一定是 \(x,y,z\) 某两个这样目前尚未确定的条件。
定义一个能量,给每个 pair 赋上 \(1/2\) 的能量,每个 triple 赋 \(1\)。合成需要 \(1/2\) 和 \(1\) 的能量,拆散需要 \(1/2\) 的能量。每次交互库会给我们一些能量让我们做一些操作。
操作3
能量余量为 \(1/2\)。设 \(v(x)\) 为 \(x\) 的可能的权值,还没有确定则 \(v(x)=n+1\)。不妨假设 \(v(x)\le v(y)\)。如果 \(v(x)=n+1\) 那么利用 \(1/2\) 的能量合成 \(x,y\),否则利用 \(1/2\) 的能量拆散 \(x\)。
操作2
能量 \(1\) 很充足。不妨假设 \(v(x)\le v(y)\)。只有当 \(v(x)=n+1\) 的时候有区别,这种情况用全部能量直接确定 \(x\)。
操作1
能量 \(1\)。不妨假设 \(v(x)\le v(y)\le v(z)\)。注意到 \(1\) 的能量可以用来拆开两对,或者合成一个 triple。如果 \(v(x)=n+1\) 那么合成;如果 \(v(y)\le n\),直接拆 \(x,y\);否则 \(v(x)\le n,v(y)>n\),分配 \(1/2\) 用来拆散 \(x\),\(1/2\) 用来合成 \(y,z\)。
Double Knapsack
考虑当 \(a=\{n,n,n,...\}\),即选一个 \(b\) 的子集和是 \(n\) 的倍数。
类似地设 \(l_i\) 表示最小的 \(j\) 满足 \(sa_j\ge sb_i\),不妨假设 \(sa_n\ge sb_n\),则 \(0\le sa_{l_i}-sb_i<n\) 一定有两者相同,则构造 \((l_i,l_j]\cup (i,j]\) 即可。
Homework
Sophisticated Device
Colorful Polygon
注意力环节,考虑如何构造 \(C(a+b,a)\):构造一个上底长为 \(a\),下底长为 \(b\) 的梯形,考虑第一条边,要么上端点向右移动 \(1\),要么下端点向右移动 \(1\),故方案数恰好是 \(C(a+b,a)\)。
分治(or 无脑写最优的合并果子),分治树有三层 \(7\) 个非叶点,点数为 \(3n+7*3-1\)。
Indicium
把一种数的 \(n\) 次出现全部填入,拉丁方的剩余部分是可以直接正则图流的。
经过置换只需要构造 \(111...\),\(111...22\),\(111...23\),把 \(123\) 全都手动填上,再跑网络流/heuristic构造。
Generalized Insertion Sort
一条链直接 \(n-1\) 次操作,进行插入排序。
否则考虑划分为若干组互不相交的链,同时进行插入排序,废点就丢在任意一个叶子上。这样并不能保证废点不会被挤上来,但如果被挤上来了说明一整条链都填满了,这种总共只会发生 \(n\) 次,再加上 \(n\log n\) 次。并且实际上卡不满,考虑完全二叉树实际 \(1+2+4+...=2n-1\) 次,链实际 \(n\) 次,最优大概链套满二叉树,有大概 \(1/4\) 常数。
Triangles
如果没有三点共线,那么按照 \((x,y)\) 字典序排序后相邻三个组,答案能取到 \([n/3]\)。
否则答案为 \(\min([n/3],n-同一条直线上的点数)\)。
每匹配掉三个点前者 \(-1\),后者 \(-1\) 到 \(-3\)。如果一开始后者占优,可以一直做到前后相等,或者后者大 \(1\)。做完之后线上的点大概占 \(2/3\),扔掉没用的点直到 \(3|n\),那么要么恰好 \(2/3\),要么 \(2k-1\) 和 \(k+1\)。前者好构,后者至少要有额外的一个“倒立”的三角形,还是可以匹配直到只剩底下剩 \(3\) 外面剩 \(3\),分讨都能匹配。
Waking Shadows
扫描线,对每个左端点维护一个集合 \(S_l\),在扫描 \(r\) 的过程中处理 \(S_l\) 的变化。
对于每个值 \(v\),一定是在一段前缀的集合中出现,记作 \(p_v\)。加入一个数对 \(p\) 的影响和回转寿司类似。一样维护,对于询问找到第一个块再进入该块查询。
末日魔法少女计划
\(k=1\) 最优解:预处理 \(n^2\) 个区间。
\(k=2\) 最优解:猫树。
\(k=3\) 最优解:sqrt tree,动态地分成 \(\sqrt n\) 叉,叉间预处理,\(T(n)=\sqrt nT(\sqrt n)+n\),解得 \(T(n)=O(\log \log n)\)。
\(k=n\) 最优解:。
\(k\sim \sqrt n\) 最优解:分块。
结合线段树、sqrt tree 和分块的想法。
将结构抽象为:分成 \(p\) 块,块间做 \(k-2\) 的子问题,块内递归。
设 \(f_{n,k}\) 表示长度为 \(n\) 的块,\(g_{n,k}\) 表示剥去最前和最后两个块。枚举 \(p\),那么块的大小应该尽量均分,即 \(p-n\bmod p\) 个 \(n/p\) 和 \(n\bmod p\) 个 \(n/p+1\)。
Alice,Bob and two arrays.
Draw in Straight Lines
每个格子设四个变量,分别表示有没有行覆盖1,列覆盖1,行覆盖0,列覆盖0.
限制1:如果同时有行覆盖01或同时有列覆盖01,付出 \(+\infty\) 的代价.
限制2:选一次覆盖花费 \(a\) 的代价,如果这个格子覆盖了且下一个格子没覆盖,额外花费 \(b\) 的代价。
限制3:最后是1:如果既有行覆盖0,或者有列覆盖0,付出 \(+\infty\) 的代价;如果既没有行覆盖1也没有列覆盖1,花费 \(c\) 的单点修复。最后是0:如果有行覆盖1且有列覆盖1,付出 \(+\infty\) 的代价;如果没有行覆盖0且没有列覆盖0,付出 \(c\) 的代价。
上述限制都是形如“\(x_i\bar{x_j}\) 就额外花费多少的代价”,注意进行一些奇偶翻转之后是 \(x_i\bar{x_j}\) 的形式,而非 \(x_ix_j\) 或 \(\bar{x_i}\bar{x_j}\),因此可以使用切糕建模转求最小割。
大部分变量之间怎么约束都是可以用切糕建模的。敢想敢列。
Trzy drogi [A]
每条边记一个长度,选三条边的方案数为 \(l_il_jl_k\)。
先处理掉图不联通。处理掉选一条割边的情况,然后就假设割边不会选,将两个端点缩起来,把边删掉。再处理选两条 \(x_i=x_j\ne 0\) 的边,算上选 \(l_il_j\) 的情况,就可以假设不会同时选 \(i,j\),把 \(l_j\) 并到 \(l_i\) 上,再把 \(j\) 两个端点缩起来,删掉边 \(j\)。
这样处理后有性质 \(m\ge 1.5n\)。
现在可以假设非平凡情况,即 \(x_i\ne x_j\ne x_k\ne 0\)。
分四种情况:两条非树边(先判掉),两条树边不是祖先后代关系,非树边跨越靠下的树边,非树边跨越靠上的树边。
对非树边跨越靠上的树边的情况:只关心非树边的下端点集,如果一个端点既不是 dfs 序最小的也不是 dfs 序最大的,意味着前后都有其他点,则向上到 \(u\) 一定有至少两个分叉,因此不可能成为候选非树边。因此候选非树边只有两条,枚举 \(i,j\),可以唯一确定另一条树边 \(k\)。
只剩选三条树边的情况,就可以将所有非树边缩起来。
由性质最多有 \(2/3\) 条树边,因此每轮边数至少变为 \(2/3\),点数与边数同阶,复杂度累加还是单 log。
Stirling Number
组合数相关复习:
- 固定下指标,关于上指标的生成函数 \(\frac{(1-x)^{m+1}}{x^m}\)。
- 固定上指标,关于下指标的生成函数 \((1+x)^n\)。
上指标求和:\(n++,m++\)
lucas 定理:\((1+x)^p=1+x^p\)(在模 \(p\) 意义下)。\((1+x)^n=(1+x)^{n\bmod p}(1+x)^{p[n/p]}=(1+x)^{n\bmod p}(1+x^p)^{[n/p]}\),提取 \([x^m]\),只能是前面贡献 \(m\bmod p\) 后面贡献 \(m/p\)。
crt:构造 \(n\) 个基:模 \(a_i\) 等于 1,模 \(a_j\) 等于 0 (\(j\ne i\))。再点乘 \(b\)。例:已知模 \(2\) 为 \(a\),模 \(5\) 为 \(b\),构造基 \(5,6\),\(n=(5a+6b)\bmod 10\)
如何优雅地求和
斯特林数学习:
生成函数相关:
第一类斯特林数关于 \(m\) 的生成函数是一个上升幂:\(\sum_{m} [n,m]x^m=x(x+1)...(x+n-1)=x^{\overline{n}}\)
第二类斯特林数关于 \(m\) 的下降幂生成函数:\(\sum_m \{n,m\}x^{\underline m}=x^n\)。即可以当成多项式理解,也可以代入 \(x\) 理解。
或者 \(x^n=\sum_m \{n,m\}x^{\underline m}\) 普通多项式->下降幂多项式 变换

浙公网安备 33010602011771号