package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
for {
scanner := bufio.NewScanner(os.Stdin)
// 设置大缓冲区,防止大输入时出错
buf := make([]byte, 1024*1024) // 1MB
scanner.Buffer(buf, 1024*1024)
scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔)
// 读取第一行:n
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
if n == 0 {
break
}
arr := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
arr[i], _ = strconv.Atoi(scanner.Text())
}
fmt.Println(process(arr))
}
}
func process(arr []int) int {
maxv := arr[0]
pre := arr[0]
for i := 1; i < len(arr); i++ {
// 在i位置处,求每个地方的最大值,只有2种可能性
// pre代表[0,i-1]处最大值,若pre大于等于0, i位置处最大值为pre+arr[i]
// 若pre小于0,i处最大值为arr[i]
pre = max(pre+arr[i], arr[i])
maxv = max(maxv, pre)
}
return maxv
}
func max(a, b int) int {
if a>b {
return a
}
return b
}