LGP8125 [BalticOI 2021] The short shank 学习笔记
Luogu Link
题意简述
有一列 \(N\) 个元素,第 \(i\) 个元素初始值 \(t_i\),而后会被更新为 \(\min_{j=lb=1}^{rb=i} t_j+(i-j)\)。现在给你 \(D\) 个隔板,如果在第 \(i\) 个和第 \(i+1\) 个之间放置,则有效果:\(\forall j>i,lb_j=\max(lb_j,i+1)\)。问在合理安排隔板放置的情况下,\(\sum [t_i<T]\) 的最小值。
\(1\le D<N<2\times 10^6,1\le T,t_i\le 10^9\)。
做法解析
首先我们发现,初始就有 \(t_i\le T\) 的这部分贡献是救不回来的,我们称之为“特殊点”。我们只能争取初始 \(t_i>T\) 的那些元素不被传染。
我们不妨来研究一下,在不设隔板的情况下传染的机制是怎么样的:直观感受上,这种每一时间右扩一格的东西很像一个一次函数——实际上也确实如此。以位置 \(p\) 为横轴,时间 \(t\) 为纵轴,我们发现:每个特殊点 \(i\) 的传染模式形成一条斜率为 \(1\)、定义域左边界为 \(i\) 的一次函数;最后每个点 \(j\) 实际被传染到的时间就是这一大堆函数在 \(j\) 处的取值取 \(\min\);而放隔板的作用就体现为斩断隔板左边的所有函数。
一个点若不被传染,那么
“沿着T取max”
代码实现