Pagini recente » Cod sursa (job #807514) | Cod sursa (job #931019) | Cod sursa (job #2864141) | Cod sursa (job #1095679) | Cod sursa (job #3335803)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n, x, y, st, dr, sum, Smax, stc, drc;
int main()
{
fin >> n;
fin >> x;
sum = Smax = x;
st = 1;dr = 1;
drc = 1; /// drc va fi tot timpul i
stc = 1;
for(int i = 2 ; i <= n ; i++)
{
fin >> y;
/// actualzarea sumei curente
if(sum + y >= y)
{
sum += y;
}
else
{
sum = y;
stc = i;
}
/// drc = i;
/// analizarea sumei curente alaturi de cea optim
if (sum > Smax) { /// ctiteriul 1
Smax = sum;
st = stc;
dr = i;
} else
if (sum == Smax) { /// criteriul 2, indicele de inceput mai mic
if (stc < st) {
st = stc;
dr = i;
}
/**else
if (stc == st) {
}
nu mai trebuie tratat ca nu mai aduce valoare intrucat drc este sigur mai mare decat dr altor secvente
determinate anterior pentru ca dr fiecarei secvente este chiar i, si noi mergem cu el crescator
**/
}
if(Smax <= sum)
{
Smax = sum;
dr = i;
}
}
fout << Smax << " " << st << " " << dr;
return 0;
}