ARC100B 双指针

[ARC100B] Equal Cut

给定数列 \(A\),将其连续分为 \(4\) 段,最小化并输出每段数字和的极差。

为了方便,称第 \(1\) 段右端点为 \(l\),第 \(2\) 段右端点为 \(mid\),第 \(3\) 段右端点为 \(r\)

朴素想法:\(O(n^4)\) 枚举 \(l, mid, r\) 并且计算判断。显然不可行。

于是我们可以加上前缀和,优化一级复杂度,但 \(O(n^3)\) 对于 \(2 \times 10^5\)\(n\) 还是不行。

考虑更多优化。可以发现,只要枚举 \(1 < mid < n\)\(l\) 必须在分割 \([1, j)\) 后第 \(1, 2\) 段相差最小,而 \(r\) 必须在分割 \((j, n]\) 后第 \(3, 4\) 两段相差最小,才能使得极差最小。

直接用类似双指针的办法求出 \(l, r\) 即可。复杂度大概是 \(O(n)\)?详细计算部分参见 代码

posted @ 2023-12-25 19:21  Carrot-Meow~  阅读(12)  评论(0)    收藏  举报