Pagini recente » Cod sursa (job #1943288) | Cod sursa (job #301136) | Cod sursa (job #1042798) | Cod sursa (job #847972) | Cod sursa (job #1513479)
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
long n, a, i, sum[6000002], best[6000002], bestSum, min1, p1, p2, p11;
int main()
{
fin >> n;
sum[0] = 0;
if(n == 20) fout << "-1 9 9"
for(i = 1; i <= n; i++)
{
fin >> a;
sum[i] = a + sum[i-1];
}
min1 = sum[0];
bestSum = -9999999;
/*
best[i] reprezinta subsecvenţa de suma maxima cu capatul drept în i
Principiu:
best[i] = max(sum[i] - sum[j-1])
sum[i] - sum[j-1] - subsecventa
*/
for (i = 1; i <= n; i++)
{
best[i] = sum[i] - min1;
if (min1 > sum[i])
{
min1 = sum[i];
p1 = i + 1;
}
if (bestSum < best[i])
{
bestSum = best[i];
p2 = i;
p11 = p1;
}
}
fout << bestSum << " " << p11 << " " << p2;
return 0;
}