public static int MaxSoFar_Quadro2(int[] arr) { int[] cumarr = new int[arr.Length]; cumarr[0] = 0; for (int i = 1; i < arr.Length; i++) { cumarr[i] = cumarr[i - 1] + arr[i]; } int maxsofar = 0; for (int i = 0; i < arr.Length; i++) { for (int j = i; j < arr.Length; j++) { int sum; if (i == 0) { sum = cumarr[j]; } else { sum = cumarr[j] - cumarr[i - 1]; } /* sum - сумма всех элементов arr[i..j] */ maxsofar = Math.Max(maxsofar, sum); } } return maxsofar; }