CF1601E Phys Ed Online

考虑一个贪心。

我们一定采取的方案是

\(b_i = \min_{j = i - k}^i a_j\)
\(\sum a_l + b_{l + k} + \min_{i = 1}^2{b_{l + ik}} + \min_{i = 1}^3{b_{l + ik}}......\min_{i = 1}^t{b_{l + ik}}\)

那么我们看出来可以只考虑同余系的关键点即可。

但是我们发现我们不好计算答案。

一个想要的考虑是扫描线。

但是我们发现这样需要支持区间加,区间取 \(0\),区间加等差数列,单点查。
然后我发现我不会区间加等差数列,所以只能考虑正解做法。

考虑我们差分答案,记\(f_i\)为一直到结尾的答案,考虑倒序枚举\(i\),直接单调栈,其转移显然。

那么\([l,r]\)答案应为\(f_i - f_p + b_p * {(r - p + 1)} + a_l\)
\(p\)为\([l,r]\)中最小值位置。

考虑笛卡尔树上的\([l,r]\)的最小值位置即其两点\(LCA\)位置。

那么复杂度为\(O(nlog{\frac{n}{k}} + q)\)

较正解做法\(O((n + q)log)\) 效率应该差距不大。

所以这里采用正解做法即ST表二分。

上一篇:ES7 JavaApi 使用ik分词器


下一篇:nodejs中的子进程,深入解析child_process模块和cluster模块