8.6
下降幂乘法卡了两页多最终都没过,果然大常选手不适合做多项式。
AT_arc150_f [ARC150F] Constant Sum Subsequence No FST
神仙分治。
首先有一个 O(S2logn) 的暴力:设fi 表示和为 i 时最小的 p,nxt(x,k) 表示 x 之后下一个 k 出现的位置,可以预处理再以 O(logn) 求出。那么有:
fi=j=1maxinxt(fi−j,j)
乍一看好像亿点优化空间也没有,但是神仙就是神仙。考虑分治,计算 [l,mid] 对 [mid+1,r] 的影响,枚举 j 这一维,显然 fi 单调递增,那么就有一段连续的 k∈[pos,mid],nxt(fk,j)=x,可以直接更新答案,对于其他的 k∈[l,pos−1],有 nxt(fk,j)<fmid(不然就不符合定义了),又有 fmid 小于右半边的 f,所以这些 k 不会成为答案。于是只要区间取 max 即可。
8.7
学习了支配对黑科技。
支配对
常用于点对统计问题。
- 支配:若统计 (u2,v2) 时必然会统计到 (u1,v1),且 (u2,v2) 的贡献会被 (u1,v1) 覆盖,那么称 (u1,v1) 支配了 (u2,v2)。显然 (u2,v2) 是没必要统计的。
- 支配对:若 (u1,v1) 未被任何点对支配,则称 (u1,v1) 为支配对。显然只要统计了所有支配对就能统计所有信息。
求出支配对后,用扫描线即可解决询问。
支配对分为两类。
- 树上支配对:一般存在于区间内点对 lca 相关的问题,可以枚举 lca,对于节点 u,与他不在一颗子树中他的前驱/后继可与他构成支配对。可用树上启发式合并 + set 做到 O(nlog2n),支配对只有 O(nlogn) 个。
- 序列支配对:一般满足,对于点对 (i,j) 中的 i,仅有 O(logn) 个 j 与 i 构成支配对。一般可以这么构造:1.(i,i+1) 显然为支配对。2.若 (i,j) 为支配对,(i,k) 为支配对且 k>j,那么 (i,j) 与 (j,k) 均不能支配 (i,k),且利用此性质可使 k 的取值范围或某个值域减半。
P7880 [Ynoi2006] rldcot No FST
P8528 [Ynoi2003] 铃原露露 FST=2
P9058 [Ynoi2004] rpmtdq P9678 [ICPC2022 Jinan R] Tree Distance No FST
都是链接里的例题。
P8512 [Ynoi Easy Round 2021] TEST_152 No FST
一发进入最优解第一页祭。
考虑扫描线处理询问,枚举询问右端点 r。
有个显然结论:按操作把序列分段的段数是 O(n) 级别。序列长度都是 O(n) 了这有什么用。其实是很有用的,这意味着把这些连续段分别加入、删除的复杂度也是 O(n) 的!于是可以在 set 中记录四元组 (l,r,ti,v) 表示区间 [l,r] 的值均为 v,且是由第 ti 次操作造成的。新加入一个操作时,暴力加入和删除,权值在树状数组 cti 处加减,询问则统计后缀和即可。
8.8
P8543 「Wdoi-2」纯粹的复仇女神 FST=2
若只有一种颜色,显然可以扫描线,再用一个单调栈维护之前的值及其覆盖区间,加入就暴力删除同时线段树做区间覆盖即可。
若有多种颜色,仍然使用扫描线和单调栈,只不过要把多个区间覆盖取 max,不可做,考虑转化为区间标记的加入与删除,放在线段树对应区间的节点上即可,用标记永久化统计答案。
时间复杂度 O(nlog2n+qlogn)。
P1222 三角形 P3219 [HNOI2012] 三角形覆盖问题 No FST
将三角形的左右顶点横坐标离散化,这样每个三角形都被分割成梯形或三角形,在扫描的每一段内,把相关的三角形按当前段内最上面的顶点从大到小排序,然后逐个计算答案,分类讨论是平凡的。
时间复杂度 O(n2logn),过不了蓝题,其实不用每次排序,用 set 在线维护即可,时间复杂度 O(n2)。
CF506D Mr. Kitayuta’s Colorful Graph FST=4
根号分治。枚举颜色 c,再用并查维护集,处理询问,记 sumc 为颜色 c 包含的边数。
- 若 sumc≤B,则暴力枚举并查集中点对 (u,v),看能否对某个询问产生贡献。
- 若 sumc>B,则暴力枚举所有询问,看是否联通。
8.9
P2260 [清华集训2012] 模积和 No FST
把原式拆成两个和式的乘积,分开计算再减去多算的部分即可。
P5221 Product FST=2
分别考虑每个质因子 p,记 fp(n) 为 n 分解后因子 p 的个数,则原式等于:
p∏i=1∏Nj=1∏Np∣fp(i)−fp(j)∣
=p∏p∑i=1N∑j=1N∣fp(i)−fp(j)∣
求出 fp(i)=k 的 i 的个数,然后做线段覆盖求解即可。
CF1801F Another n-dimensional chocolate bar No FST
神仙题。
显然不能把当前 b 的乘积 j 作为一维,考虑设 fi,j 表示 b1∼i 将 k 消减后接下来的数乘积至少为 j 才能符合要求。
同时有个结论:
⌈bij⌉=⌊bij−1⌋+1
显然这样状态数只有 O(n) 种,可以接受。
转移时,用整除分块取最小的 bi 即可。
时间复杂度 O(n0.75)。