package DynamicProgramming;

import java.util.Scanner;

/**
 * Program to implement Kadane’s Algorithm to calculate maximum contiguous subarray sum of an array
 * Time Complexity: O(n)
 *
 * @author Nishita Aggarwal
 */
public class KadaneAlgorithm {

  /**
   * This method implements Kadane's Algorithm
   *
   * @param arr The input array
   * @return The maximum contiguous subarray sum of the array
   */
  static int largestContiguousSum(int arr[]) {
    int i, len = arr.length, cursum = 0, maxsum = Integer.MIN_VALUE;
    if (len == 0) // empty array
    return 0;
    for (i = 0; i < len; i++) {
      cursum += arr[i];
      if (cursum > maxsum) {
        maxsum = cursum;
      }
      if (cursum <= 0) {
        cursum = 0;
      }
    }
    return maxsum;
  }

  /**
   * Main method
   *
   * @param args Command line arguments
   */
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n, arr[], i;
    n = sc.nextInt();
    arr = new int[n];
    for (i = 0; i < n; i++) {
      arr[i] = sc.nextInt();
    }
    int maxContSum = largestContiguousSum(arr);
    System.out.println(maxContSum);
    sc.close();
  }
}

KadaneAlgorithm