Я протестировал его с 2 массивами (текущий (результат [1,4]) и прокомментировал (результат [3,3]), см. Код):
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[] = {3, -4, 2, -3, -1, 7, -5};
//int arr[] = {2, 6, 8, 1, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int min_ending_here = INT_MAX;
int min_so_far = INT_MAX;
int infimum = INT_MAX; // hold minimum value.
std::pair<int, int> idx(-1, -1); // subarray's indexes
for (int i=0; i<n; i++)
{
if (min_ending_here > 0)
{
min_ending_here = arr[i];
}
else
min_ending_here += arr[i];
min_so_far = min(min_so_far, min_ending_here);
// indexes addition
if( min_so_far == min_ending_here)
{
infimum = min(arr[i], infimum);
if( infimum == arr[i] )
{
idx.first = i;
}
idx.second = i;
}
// << indexes addition
}
cout<<"minimum sum = "<<min_so_far << " indexes: " << idx.first << " " << idx.second;
}