集训总结(九)

9.24

P11770 檐牙覆雪

暴力很好写,直接枚举即可。单次询问复杂度 \(O(nlogn)\)。打个表,发现每个地方的最大雪堆都是由它的最大质因子位置转移而来.

\(f_i\) 表示最后 \(i\) 处最大雪团体积,则有转移:\(f_i=max(f_{\frac{i}{p}})+\frac{n}{\frac{i}{p}}-p+1\)

于是我们可以预处理出每个数的最大质因子。发现它们会构成一棵树。我们每次往根节点走,在到达的点加上贡献即可。

复杂度 \(O(T+nlogn)\)

9.25

P6097 子集卷积

首先有 \(h_i=\sum_{j \cup k=i}f_j \times g_k\)

第一个限制 \(i \cup j=k\),直接上 \(FMT\) 即可。

第二个限制 \(i \cap j=k\),可以转换为 \(\left | i \right |+\left | j \right |=\left | i \cup j \right |\),计算时再开一维记录集合大小即可。

\(f_{i,j}=a_j \times [\left | j \right |=i]\)\(g_{i,j}=b_j \times [\left | j \right |=i]\),则有 \(h_i=\sum_{k=0}^if_k*g_{i-k}\)。最后答案即为 \(c_i=h_{\left | i \right |,i}\)

P4463 calc

很容易写出一个暴力 \(dp\):设 \(f_{i,j}\) 表示前 \(i\) 个数取值域范围为 \([1,j]\) 的数的方案数,则有转移:\(f_{i,j}=f_{i-1,j-1}\times j+f_{i,j-1}\),最终答案即为 \(f_{n,V}\times n!\)

但此时是 \(O(nV)\) 的,考虑优化。

\(f\) 进行差分,令 \(g_{i,j}=f_{i,j}-f_{i,j-1}\),则有转移:\(g_{i,j}=j \sum_{k=0}^{j-1}g_{i-1,k}\),同时也有 \(f_{i,j}=\sum_{k=0}^jg_{i,j}\)

此时可以发现 \(g_{n,i}\) 是关于 \(i\) 的二次函数,证明略。
接下来就很好做了:先 \(dp\) 出值域为 \([1,2n-1]\)\(f\) 值,然后拉插求出这个 \(2n+1\) 次函数,最后带入 \(x=V\) 即可。

9.26

P10102 矩阵

直接判的话是 \(O(n^3)\) 的,考虑优化。

发现对于一个向量 \(D\)\(D \times A \times B=D \times C\),而向量和矩阵相乘是 \(O(n^2)\) 的,所以我们可以随机构造一个向量,判断是否满足条件即可。

正确性我不会证,不过听 sgz 说错误率为 \(\frac{1}{mod}\)

P12479 长野原龙势流星群

为什么大家都写 \(dp\) 呀,只有我觉得这是贪心吗?

考虑一个最大点权的点 \(x\),那么以它为根的联通块一定只选它一个,这很显然。
我们再考虑它的父亲 \(y\),不难发现,如果一个联通块包含了 \(y\),那么再包含一个点 \(x\) 一定不劣。那么我们就可以直接把 \(x\)\(y\) 缩成一个点。用优先队列维护这个过程,将点权变为平均点权即可 \(O(nlogn)\) 解决。

P13523 序列与查询

赛时写的 KTT,成功被眉目出题人卡成 \(70\)

\(f(x)\) 表示长度为 \(x\) 的最大子段和大小,那么此时区间加 \(k\)\(f\) 的影响就是 \(f(x)=f(x)+kx\)

发现所有 \((x,f(x))\) 构成一个上凸壳,因此我们只需要预处理出上凸壳,查询时在凸壳上二分,即可 \(O(logn)\) 完成一次查询。具体的,我们对于一条斜率为 \(-k\) 的直线,我们在凸壳上二分,找到与凸壳相切的直线即可。

考虑如何预处理凸壳。我们采用分治的方法,将区间 \([l,r]\) 分成 \([l,mid]\)\([mid+1,r]\) 递归下去,处理出区间内的凸壳,然后将左右区间的凸壳合并即可。对于合并,直接闵可夫斯基和就可以。

复杂度 \(O(nlogn+qlogn)\)

KTT 过几天再写。

posted @ 2025-09-27 22:22  leizepromax  阅读(12)  评论(0)    收藏  举报