寻找循环移位后子数组的最大和

Kotlin Hard loops

任务 «寻找循环移位后子数组的最大和»

给定一个整数数组。允许执行恰好一次循环左移(第一个元素变为最后一个)或循环右移(最后一个元素变为第一个),移动次数任意,但不超过数组长度。之后,需要找到连续子数组的最大和(使用卡丹算法)。要求确定在执行一次循环移位后所能获得的最大可能和。如果数组为空,则输出0。

输入格式

第一行:一个整数 N(1 ≤ N ≤ 10^6)——数组的长度。第二行:N 个以空格分隔的整数(每个数的绝对值 ≤ 10^9)。

输出格式

一个整数——经过一次循环移位后子数组的最大和。

示例

示例 1

输入
4 -1 -2 -3 -4
输出
-1
main.kt