2021.09.23pm
2021.09.23PM
| 预期 | 实际 | |
|---|---|---|
| A | 100 | 0 |
| B | 30 | 40 |
| C | 100 | 29 |
| D | 100 | 100 |
| S | 330 | 169 |
菜死了
A 祖孙询问 \(\blacktriangle\)
- 这道题是道典型的\(LCA\),
但我就是不写倍增ST - 因为 \(Tarjan\) 忘得差不多了,就现场口胡了一个(结果访遍历儿子写挂了还过了样例??)
- 先跑一次 \(DFS\) 记录层数。
- 把所有标记建在层数较浅的位置。
- 每次访问完一个点修改它的并查集中的父亲为树上的父亲
- 访问完所有儿子后看标记的对象的父亲是否相同
B 软件包管理器 \(\blacktriangle\!\blacktriangledown\)
- 就是一道树剖板子,可惜之前不会写,练了一道板子就发现
so easy。 - \(install\) 就一直往上跳重链,轻链跳到根,路径上全部修改 ;\(uninstall\) 就把子树全部更新掉(size[x])
C Best Cow Fences \(\blacktriangle\)
- 一道二分或倍增或倍减
- 目的是找一个最大平均值,那显然满足二分性质
- 我们先假设一个平均值,序列每个数都减去这个平均值,然后找最大的区间,方法和之前的一道题一致,不断更新前缀和,减去左侧最小的前缀和即为以这个数结尾的最大区间和。(这个地方可以优化,一是只要有一个区间为正就可以退出了,二是预处理前缀和)
- 但由于 \(double\) 等玄学力量,\(u2003\) 一直过不掉这道题···
D 数列极差 \(\blacktriangle\)
- 先尝试着简单扩展式子:\(((((a*b+1)*c+1)*d+1)*e+1)···\)。
- 发现,越往后的数贡献越大。
- 那么对于最大值,维护一个堆,每次取出两个最小值合并后放回。
- 对于最小值,则每次取出最大值合并后放回。

\(\cal {Made} \ {by} \ {YuGe}\)
浙公网安备 33010602011771号