Pagini recente » Cod sursa (job #1334845) | Cod sursa (job #2922693) | Cod sursa (job #508450) | Cod sursa (job #261689) | Cod sursa (job #1126413)
/*# include <fstream>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int n, sume[6000005], maxim, sum, startSecv, endSecv, minim = 0, pozMin = 0, c;*/
# include <fstream>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int n, sume[6000005], i, j, a, maxim = -2000000000, sum, imax, jmax, minim = 2000000000, c;
int main()
{
f >> n;
for (i = 1; i <= n; i++)
{
f >> a;
sume[i] = sume[i-1] + a;
}
for (i = 1; i <= n; i++)
{
sum = sume[i] - minim;
if(sum > maxim)
{
maxim = sum;
imax = i;
c = jmax;
}
else
if (sum == maxim)
{
if(c > jmax) jmax = c;
else
if (c == jmax)
{
if((jmax - imax) > (c - imax))
jmax = c;
}
}
if (sume[i] < minim)
{
minim = sume[i];
jmax = i+1;
}
}
g << maxim << " " << jmax << " " << imax;
}
/*
int main()
{
f >> n;
for (int i = 1; i <= n; i++)
{
int a;
f >> a;
sume[i] = sume[i-1] + a;
}
maxim = sume[1];
startSecv = 1;
endSecv = 1;
// Facem (sume[i] - minim) si daca minim = 0 consideram ca am putea lua sume[i] ca A[1] + ... + A[i]
for (int i = 1; i <= n; i++)
{
sum = sume[i] - minim;
if(sum > maxim)
{
maxim = sum;
endSecv = i;
startSecv = pozMin + 1;
}
else
if (sum == maxim)
{
if(pozMin + 1 < startSecv)
{
startSecv = pozMin + 1;
endSecv = i;
}
}
if (sume[i] < minim)
{
minim = sume[i];
pozMin = i;
}
}
g << maxim << " " << startSecv << " " << endSecv;
}*/