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)\)?详细计算部分参见 代码。

浙公网安备 33010602011771号