Pagini recente » Cod sursa (job #2317048) | Cod sursa (job #1036835) | Cod sursa (job #3282733) | Cod sursa (job #1258949) | Cod sursa (job #1452446)
#include <climits>
#include <fstream>
#include <vector>
std::vector<int> MaxSubarray(int array[], int size)
{
int maxSoFar = INT_MIN;
int maxEndingHere = 0;
int start = 0;
int bestStart = 0;
int stop = -1;
int maxElement = INT_MIN;
int maxElementIndex = -1;
for(int i = 0; i < size; i++)
{
maxEndingHere += array[i];
if(maxEndingHere < 0)
{
maxEndingHere = 0;
start = i;
}
if(maxSoFar < maxEndingHere)
{
maxSoFar = maxEndingHere;
bestStart = start;
stop = i;
}
if(maxElement < array[i])
{
maxElement = array[i];
maxElementIndex = i;
}
}
std::vector<int> retval;
if(maxSoFar == 0)
retval = {maxElement, maxElementIndex, maxElementIndex};
else
retval = {maxSoFar, bestStart, stop};
return retval;
}
int main()
{
std::ifstream fin("ssm.in");
std::ofstream fout("ssm.out");
int size;
int* array;
fin >> size;
array = new int[size];
for(int i = 0; i < size; i++)
fin >> array[i];
auto result = MaxSubarray(array, size);
fout << result[0];
fout << " " << result[1] + 1;
fout << " " << result[2] + 1;
fout << std::endl;
fin.close();
fout.close();
return 0;
}