记录(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\),每个位置独立。
image

如果一个位置可以变为 \(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

组合数相关复习:

  1. 固定下指标,关于上指标的生成函数 \(\frac{(1-x)^{m+1}}{x^m}\)
  2. 固定上指标,关于下指标的生成函数 \((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}\) 普通多项式->下降幂多项式 变换

posted @ 2026-07-24 10:53  Network_Error  阅读(8)  评论(0)    收藏  举报