2021.09.23pm

2021.09.23PM

预期 实际
A 100 0
B 30 40
C 100 29
D 100 100
S 330 169

菜死了

A 祖孙询问 \(\blacktriangle\)

  1. 这道题是道典型的\(LCA\)但我就是不写倍增ST
  2. 因为 \(Tarjan\) 忘得差不多了,就现场口胡了一个(结果访遍历儿子写挂了还过了样例??)
  3. 先跑一次 \(DFS\) 记录层数。
  4. 把所有标记建在层数较浅的位置。
  5. 每次访问完一个点修改它的并查集中的父亲为树上的父亲
  6. 访问完所有儿子后看标记的对象的父亲是否相同

B 软件包管理器 \(\blacktriangle\!\blacktriangledown\)

  1. 就是一道树剖板子,可惜之前不会写,练了一道板子就发现so easy
  2. \(install\) 就一直往上跳重链,轻链跳到根,路径上全部修改 ;\(uninstall\) 就把子树全部更新掉(size[x])

C Best Cow Fences \(\blacktriangle\)

  1. 一道二分或倍增或倍减
  2. 目的是找一个最大平均值,那显然满足二分性质
  3. 我们先假设一个平均值,序列每个数都减去这个平均值,然后找最大的区间,方法和之前的一道题一致,不断更新前缀和,减去左侧最小的前缀和即为以这个数结尾的最大区间和。(这个地方可以优化,一是只要有一个区间为正就可以退出了,二是预处理前缀和)
  4. 但由于 \(double\) 等玄学力量,\(u2003\) 一直过不掉这道题···

D 数列极差 \(\blacktriangle\)

  1. 先尝试着简单扩展式子:\(((((a*b+1)*c+1)*d+1)*e+1)···\)
  2. 发现,越往后的数贡献越大。
  3. 那么对于最大值,维护一个堆,每次取出两个最小值合并后放回。
  4. 对于最小值,则每次取出最大值合并后放回。

image
\(\cal {Made} \ {by} \ {YuGe}\)

posted @ 2021-09-26 20:55  u2003  阅读(23)  评论(0)    收藏  举报