Pagini recente » Cod sursa (job #1330136) | Cod sursa (job #2020909) | Cod sursa (job #1811948) | Cod sursa (job #1853808) | Cod sursa (job #3221374)
#include <bits/stdc++.h>
using namespace std;
int v[6000005];
int main() {
ifstream fin ("ssm.in");
ofstream fout ("ssm.out");
int n;
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
int maxSum = -999999999, maxSt = -1, maxDr = -1;
int curSum = 0, curSt = 1; // curDr = va fi i ul din for
for (int i = 1; i <= n; ++i) {
curSum += v[i]; //imi adaug v[i] la suma curenta
if (curSum > maxSum) {
maxSum = curSum;
maxSt = curSt;
maxDr = i;
} else if (curSum == maxSum) {
// in caz de egalitate la cea mai importanta comparatie
// trecem la urmatoarea cea mai importanta comparatie
// si anume st urile
if (curSt < maxSt) {
maxSt = curSt;
maxDr = i;
} else if (curSt == maxSt) {
// in caz de egalitate si aici, trecem la urmatoarul criteriu
if (i < maxDr) {
maxDr = i;
}
}
}
// tre sa verificam daca vrem sa pastram suma curenta si pentru i + 1
// o pastram doar daca este pozitiva
// daca este negativa vom incepe o suma noua de la i + 1
if (curSum < 0) {
curSum = 0;
curSt = i + 1;
}
}
fout << maxSum << ' ' << maxSt << ' ' << maxDr;
return 0;
}