CF1923D. Slimes

Problem - 1923D - Codeforces

  • 现在怎么菜成这样了aaaaaaa

  • 我们考虑枚举 \(i\),则到底是谁吃掉了 \(i\) 不重要 (我思考的时候就因为这个没有想到正解)

  • \(i\) 的后缀反着跑一边即可,因此只考虑 \(i\) 前缀把他吃掉的情况

  • 发现就是找一段最短的前缀的后缀和使区间里的和 \(> a_i\)

  • 但写完后会发现样例 \(3\) 过不去,因为如果区间中全是重复是不可行的

  • 并不需要 \(st\) 表求区间最值判断相等,只需要记录数组 \(lst_i\) 表示上一个与 \(a_i\) 不同的位置

  • \[\begin{cases} lst_i = lst_{i-1} & if & a_i = a_{i-1} \\ lst_i = i - 1 & elsewise \end{cases} \]

  • 复杂度 \(O(n \log n)\),瓶颈在二分

posted @ 2024-03-16 11:27  FOX_konata  阅读(9)  评论(0编辑  收藏  举报