4.1-5
// 设 [1:n] 的最大子数组为 [i:j], 则 [1:n+1] 的最大子数组为
// [i:j] 或 [k:n+1] (1 ≤ k ≤ n+1)
// 设 [1:n] 中右边界为 n 的最大子数组为 [k:n], 则 [1:n+1] 中右边界为 n+1
// 的最大子数组为
//     [k:n+1],   若 sum[k:n] > 0
//     [n+1:n+1], else
MAXIMUM-SUBARRAY(A):
  k, ksum = 1, A[1]
  lo, hi, sum = 1, 1, A[1]
  for n = 2 to A.length:
    if ksum > 0:
      ksum += A[n]
    else:
      k = n
      ksum = A[n]
    if ksum > sum:
      lo, hi, sum = k, n, ksum
  return lo, hi, sum