【笔记】杂题选讲 2023.12.12

笔记 2023.12.12:杂题选讲

ARC132E

首先发现最终状态形如:中间两个洞夹着的没人动过,它的左边全是 <,右边全是 >,考律左边全是 < 的方案数。然后若给每个洞被选时间标号,则定向方案数是 \(2^{n-\text{后缀最大值}}\)。考虑从后往前 dp,将这个系数直接记在 dp 值里,然后就能算了,考虑每次插进去一个数插在哪里。\(f_i=f_{i-1}\times 2(i-1)+f_{i-1}\)

CF1610H

无解显见。将链分类为直链(有祖先关系)和弯链,显见选一个根节点可以解决所有弯链。如果树本身是一条链,那么是经典贪心问题。类似的,对于一个合法方案,我们可以尝试将选的点向上跳,在不影响自己子树的情况下不劣。考虑 dp,\(f_u\) 表示考虑所有在子树内的关键点对应了链,关键点定义为链深度较浅的向下跳。\(f_u\) 至少是所有儿子的和,考虑关键点,如果有两个子树有 dp 值,那么全部合法,否则向有 dp 值的地方尝试跳,直到跳到某条链链底,事实上因为讨论过多,不妨认为直接就是 \(f_u=\max_{(x, y)\text{是直链},fa_u=x}(f_y+1)\)

对于最终答案,为了判断根节点选不选,不妨将 \(f_1\)\(\max_{(x, y)\text{是弯链}}\{f_x+f_y+1\}\) 取最大值,这是考虑 \((x, y)\) 上面到底有没有选到点,如果最终方案上面取到一个点,那么这个 \(\max\) 取不到。

CF704C

将限制的两个变量连边,因为度不超过二,所以就强行 dp。

这东西很烦的,应该能做的。

CF1253F

以充电中心为端点,建一张完全图,边权是两个充电中心的原图最短路,要求这张完全图上的路径最大值最小。一眼最小瓶颈生成树,重构树一下,问题变成求最小生成树。

其实是假的。

考虑树。考虑按照树上路径走,每走一步都试试充电。\(dis_x\),表示离 \(x\) 最近的充电站到 \(x\) 的距离,显然可以魔改 dijkstra。然后发现每一步能充电就必然想要充电,我们可以写一个限制形如:

\[c-dis_x-w\geq dis_y \]

表示我走完 \(x\to y\) 后必须想要充电。如果这一次没充上,下一步其实放宽限制,甚至可能寄了,所以声称路径上所有边满足这个限制是必要条件。

那么对于图就求 Kruskal 重构树。

CF1446D2

注意到全局众数 \(a\) 一定出现,否则扩张区间。枚举另一个众数是 \(x\),不妨钦定 \(x, a\) 就是区间众数(否则扩张),那么我们只需要要一个区间使得 \(a, x\) 的出现次数相等,一眼将 \(a\) 设为 \(1\)\(x\) 设为 \(-1\),找和为 \(0\) 的连续段。进一步的发现有一些 \(a\) 是没有必要每次都拉出来的,例如 aaaaaaaaaaaaaaaaaaxxxaaxaaaaaaaaaaaa 就只需要中间 \(x\) 左右两边的 \(a\)。进一步的我们就是只关心那些 \(x\) 向左向右一旦他只剩下一堆 \(a\) 就不要继续向下,这样复杂度就均摊掉了。

一些想法是我们只需要找到每个 \(x\) 向左向右到达的第一个使得 \(cnt[a]=cnt[x]\) 的地方,拉出所有 \(a, x\) 然后再做。枚举后继的部分记两个指针表示 \(a, x\) 分别行进到哪里,用一些指针和双端队列拿出所有数字,然后归并排序,然后前缀和部分直接开桶。至于具体实现我也不知道。

CF1718D

笛卡尔树同构。根据已知信息推断每个未知数的合法区间,满足合法区间后,如果有不合法的直接 swap 一下。

然后做点和区间的匹配,正着贪心失配的区间和反着贪心失配的区间(注意是区间匹配点,按照左端点排序完了以后选个最靠左的)的并,声称是合法的 \(d\) 的范围。

CF1603E

完美,等价于排序后每个前缀合法。

枚举最小值,记录填了几个数,目前到谁,总和,然后转移枚举填几个数字进去,是 \(O(n^6)\)

\(a_n=n\) 时,因为 \(a_1n\geq \sum a_i\implies 0\geq \sum (a_i-a_1)\geq 0\),由此整个序列都是 \(n\)

\(a_n=n+1\) 时,因为 \(a_1(n+1)\geq \sum a_i\implies a_1\geq \sum (a_i-a_1)\),记录右边那个东西以判断,这样记下的总和是 \(O(n)\) 的,而且不仅是这个序列,每个前缀都适用。

现在 \(O(n^5)\)

观察到枚举 \(a_1\) 之后每个数字填进去的个数,由于总和限制,是调和级数。

\(O(n^4\log n)\)

\(a_1a_k\geq \sum_{i\leq k}a_i\implies a_k\geq \sum_{i\leq k}a_i/a_1\implies a_k\geq k\)

结论是 \(a_1+\sqrt n\leq n\),因为考虑就是拿 \(y=a_1\)\(y=x\) 切,切到后面那一段,因为刚刚说了 \(a_i\geq i\),所以后面那一段,考虑 \(\sum(a_i-a_1)=O(n)\),后面一段的长度为 \(O(\sqrt n)\)

\(O(n^3\sqrt n\log n)\)

CF1208H

直接抄题解了,不想再写一遍过程了

ARC154E

先拆掉,考虑单独一个人的贡献。

\[\begin{aligned} &\sum_{i<j, p[i]>p[j]}(j-i)\\ =&\sum_{j}j\sum_{i<j}[p[i]>p[j]]-\sum_ii\sum_{i<j}[p[i]>p[j]]\\ =&\sum_i i(\sum_{j<i}[p_i>p_j]-\sum_{i<j}[p_i<p_j])\\ =&\sum_i i(i-\sum_{j<i}[p_i<p_j]-\sum_{i<j}[p_i<p_j])\\ =&\sum_i i(i-\sum_{j}[p_i<p_j])\\ =&\sum_i i(i-p_i)=\sum_i i^2-\sum_iip_i \end{aligned} \]

注意这里换一下对象,我们求每个数字 \(p_i\) 最终去到的地方的期望 \(E[final\_pos[p_i]]=s[i]\),然后求 \(\binom{n+1}{2}^m(\sum_ii^2-\sum_is_ip_i)\)


考虑对于下标 \(i\),经过一次包含它的翻转到达 \(j\),的方案数为 \(\min(i, n-i+1, j, n-j+1)\)。观察到这意味着 \(i\to j\)\(i\to n-j+1\) 的概率一样。于是无论具体到哪里的期望是多少,只要干了这个事,期望到达 \((n+1)/2\) 的位置。

没有干成这个事的概率是 \(P=(1-i(n-i+1)/\binom{n+1}{2})^m\)

从而 \(s_i=P\cdot i+(1-P)(n+1)/2\)

*ARC135D

整个矩阵经过显然的手法可以将 \(a[1...n-1][1...m-1]\) 全部置零,求出来大概是什么交替和需要是常量,然后操作不影响交替和。就我是说每一行 \(a[i][1]-a[i][2]+a[i][3]-a[i][4]\cdots\) 是常数,每一列也如此。然后乘 \((-1)^{i+j}\) 变成和不变。

然后考虑怎么构造一个新的矩阵使得它的和限制不变,这样就一定能变换过去,由刚才的置零。

不妨记 \(A_i=\sum_{j}a_{i, j}, B_j=\sum_{i}a_{i, j}\)

P8528

首先这个子区间就扫描线,历史版本和。我们肯定是想数不合法区间的个数。

考虑 \((x, y)\),如果 \(lca(x, y)\) 在两边,就会有一个限制。

考虑支配对的形式,大概就是说 dsu on tree 的过程中,以 \(z\) 为根加入轻子树时,\(x\) 去找 \(y\) ,去找最接近的 \(y\) 才能限制到更多的区间,于是找前驱后继。

这样有用的支配对只有 \(O(n\log n)\) 个。

CF1540D

这不是我们逆康托展开吗,但是有一种新的求 \(p_i\) 值方法就是说令 \(x=b_i\),然后 \(i\) 向后枚举,如果 \(x\geq b_j\) 那么 \(x\) 自增,否则不变,最后输出 \(n-x\)\(x\) 维护了目前已知比 \(p_i\) 大的数字的个数。

考虑对这东西分块,有很多后缀加和二分可以做到 \(O(n\sqrt n\log n)\)。就是维护 \(x\) 进去出去什么东西。然后改成线段树好像能做,然后对询问分块处理好像能严格根号,感觉很烦。

CF468C

对于 \(x< 9\times 10^{18}\),都有 \(f(10^{18}+x)=f(x)+1\)

考虑构造,初始区间是 \([0, 10^{18})\),然后每次将区间右移,变成 \([1, 10^{18}]\),这样就等于 \(f([0, 10^{18}))+1\),每次就加一了,因为 \(a\leq10^{18}\),所以加的次数不超过 \(10^{18}\) 次,结论保持。

posted @ 2023-12-12 11:34  caijianhong  阅读(38)  评论(0编辑  收藏  举报