Pagini recente » Cod sursa (job #56310) | Cod sursa (job #1347726) | Cod sursa (job #2380257) | Cod sursa (job #1589558) | Cod sursa (job #2725002)
#include <fstream>
using namespace std;
int v[6000001], s[6000001];
/// s[i] = suma maxima a unei secvente care se incheie pe pozitia i
/// o formez fie luand singur elementul de pe pozitia i
/// fie alipindu-l la suma maxima care se termina pe pozitia anterioara
int n, i, p, maxim, pMaxim, uMaxim;
int main () {
ifstream fin ("ssm.in");
ofstream fout("ssm.out");
fin>>n;
maxim = (1<<31) + 1;
for (i=1;i<=n;i++) {
fin>>v[i];
if (v[i] + s[i-1] > v[i])
s[i] = v[i]+s[i-1];
else {
s[i] = v[i];
p = i;
}
if (s[i] > maxim) {
maxim = s[i];
pMaxim = p;
uMaxim = i;
}
}
fout<<maxim<<" "<<pMaxim<<" "<<uMaxim;
return 0;
}