2023-1-4 #23 也无妨 将泪水放逝雨断后 作引
——闹闹丶《晴天掩饰雨》
这一段一直没发闲话啊,主要是最近一直在摆(
稍微玩了一下 妄想症 Deliver Me,总体体验还是不错的。

总是会想起 cmd 博客中的一段话:
我正在做的每一道题都记在博客里,有仅是眼缘好的,有完成了核心想法的,有只剩动手写的,有写了没调完的。这样,一旦手头上的任务卡住了,可以快速切换到另一个阶段去。
一直向往着这样的做题方式,可限于学习效率,始终无法实现。😔
119 P7341 『MdOI R4』Phoenix
它的要求是达到下界,那么对于每个颜色,它出现的位置都必须连续。
我们不考虑每个位置填什么数,直接考虑对于每个颜色的区间,决定其位置。
很容易计算出每个颜色区间的长度,以及两两之间的交集。
注意数据保证有解,所以接下来的分析可能比较随性。
我们发现,如果两个区间交且不包含,那么其位置关系基本已经确定,只有翻转会带来 \(2\) 的贡献系数。
把这样的区间用并查集缩在一起,然后再找到互相包含的区间,把一个区间直接包含的所有子区间的插入方案算一下就好了。(就是个上升幂)
复杂度 \(O(nm^2+m^2\log m)\)。
120 P8922 『MdOI R5』Squares
我们只需考察两种正方形:至少三个边界上有点,两个边界且一个对角上有点(否则总能扩展)。
不妨考虑所有左,右,下有点的矩形,枚举下面的点,那么这个区域一定可以被唯一确认,二分边长,那么我们只需检查两边 \(y\) 一段区间的极差,主席树上二分即可 \(O(n\log n)\)。
求解答案采用扫描线,如果是任意矩形这是只能做到 2log 的(线段树+set),但是正方形有性质。
对于一个线段树结点,考察所有与它有交的正方形,不妨按照左边界依次加入,若某个正方形加入的更晚,边长更大,我们可以淘汰掉被它偏序的正方形。于是我们维护一个单调队列状物就好了,队首到队尾边长递减,右端点递增(手动把虽然加入的晚但是右端点更靠前的正方形忽略掉)。
复杂度 \(O(n\log n)\)。
121 P7882 [Ynoi2006] rsrams
对颜色出现次数根号分治。(阈值 \(\sqrt m\))
小颜色明显可以枚举每个子区间,做一个 \(O(n\sqrt m)\) 次修改,\(O(m)\) 次查询的二维数点,扫描线+分块即可。
绝对众数有一种经典处理方法,考虑某种颜色,将这种颜色设为 \(1\),其余颜色设为 \(-1\),那么绝对众数等价于区间和大于 \(0\)。对于其出现所有位置,将其左右第一个没有被取出的的位置取出(见 P8349 [SDOI/SXOI2022] 整数序列)那么只会取出 \(O(n)\) 个位置,且能成为众数端点的位置也是被取出的位置。
于是我们每种颜色跑个莫队就好了,一次莫队复杂度 \(O(m+n\sqrt m)\),注意调节块长使得莫队复杂度正确。
复杂度 \(O(n\sqrt m+m\sqrt n)\)。
122 AGC046D Secret Passage
我们能生成的串肯定是一个后缀,塞入一对 \(0\) 和 \(1\) 得到的。
我们考虑把答案放在其与原串 LCS 上考虑,令 \(f_{i,j,k}\) 表示 LCS 为 \(i\),多了 \(j\) 个 \(0\),\(k\) 个 \(1\) 的串数量。
为了不算重,我们插入 \(0,1\) 都只能在不与原串匹配的情况下插入。
然后再 dp 一下 \(g_{i,j,k}\) 表示前缀 \(i\) 能否凑出 \(j\) 个 \(0\),\(k\) 个 \(1\) 就好了。
复杂度 \(O(n^3)\)。
123 BJ United Round #1 梦中的项链
先不考虑环的约束。
对于相邻两项不同这一限制容斥,我们钦定放了一个同色段,列出生成函数:
(这个的代数意义可以考虑一个长度大于 \(1\) 的同色段,贡献为 \(0\))
那么答案就是 \(\frac{1}{1-F(x)}\)。
再考虑环的约束,我们只需容斥前缀和后缀的同色情况,将上述答案乘上:
注意一些 corner case 的贡献,比如所有颜色均相同,比如序列为空。(没写代码,随便口胡!)
124 P8205 [Ynoi2005] vti
比较简单啊。
建个虚树,很容易把问题转化为线性次直链逆序对查询。(dfs 序排序,每个点到虚树根的答案减去每对相邻点的 lca 到虚树根的答案)
可以直接树上莫队,然后二次离线。
也可以 top cluster,然后将询问分类,莫队二离。
125 P6780 [Ynoi2009] pmrllcsrms
将序列按照 c 分块,整块之间答案的维护,以及每次询问的散块贡献都是同一个问题:两个相邻快,前一个块的后缀和后一个块的前缀的答案。
我们记 \(a_i\) 表示前一个块长度为 \(i\) 后缀的和,\(b_i\) 为后一个块长度为 \(i\) 前缀和,那么限制就是 \(i\leqslant k,i+j\leqslant c\),翻转一下就是 \(j\leqslant i\leqslant k\),这个线段树很好维护。
块间答案再用一棵线段树维护即可,复杂度 \(O(n\log n)\)。
126 rdfz 联考-二分图最大匹配
AGC034D 加强版。
曼哈顿距离的 \(\max\),可以任意钦定两维的符号,然后匹配。
建立费用流模型:四个点表示每种正负号形式,每个红点到这四个点连边,每个蓝点从这四个点连边。(当然还有源汇的边)
这个模型也可以模拟费用流,我们用堆维护:源到这四个点的增广路,四个点到汇的增广路,四个点两两之间的增广路(注意这个东西增广路可能很复杂,算出某两个点之间的一条增广路后还要跑个 floyd)。
这样复杂度就是 \(O(n\log n)\) 了。
127 AGC054E ZigZag Break
结论题。
不妨令 \(p_1<p_n\),另外一种情况推法是一样的。
结论是,合法当且仅当存在 \(i\),满足 \(p_i\leqslant p_1<p_n\leqslant p_{i+1}\)。
充分性:我们把 \(1\) 到 \(i\) 删成一个下降的序列,\(i+1\) 到 \(n\) 删成一个下降的序列,那么后面显然也能消完。
必要性:我们操作一步后,一定无法新增这样的位置,归纳即可。
计数就比较经典了,我们考察 \([1,p_1] (p_1,p_n) [p_n,n]\) 三类数,计数不合法,也就是不能有三类在一类的后面的方案。
我们先插入二类,后面一类和三类的插入方案数都是上升幂。
列出式子:(假设 \(p_n=p_1+k\))
\(p_1>p_n\) 同理,式子是:
复杂度 \(O(T+n)\)。
128 AGC033E Go around a Circle
假设第一个字母是 R,B 只要反转一下就好了。
那么每个点附近至少一个 R,也就是 B 不能相邻。不妨考虑第一段 R 段,记长度为 \(l\),可以发现环上所有 R 段长度必须为奇数,同时长度也不能超过 \(l+[l\bmod 2=0]\),否则长度最长的段的起始位置或起始位置后面的位置无法满足条件。
同样地考虑给定字符串的其余 R 段,可以发现偶数 R 段没有限制,而奇数 R 段限制了环上每个段段长不能超过它。
那么可以直接 dp,令 \(f_i\) 为长度为 \(i\) 的方案数,前缀和优化就好了。由于还要考虑循环移位的贡献,\(f_i\) 的初值需要设定一下。
复杂度 \(O(n)\)。

浙公网安备 33010602011771号