Pagini recente » Cod sursa (job #2455401) | Cod sursa (job #3241156) | Cod sursa (job #2871736) | Cod sursa (job #1517113) | Cod sursa (job #3142280)
#include <iostream>
using namespace std;
const int INF = 1e9; //1'000'000'000
const int NMAX = 6'000'001;
int a[NMAX];
int dp[NMAX]; // suma maxima a unei subsecvente care se termina in i
int start[NMAX]; // inceputul subsecventei de suma maxima care se termina in i
int main ()
{
freopen("ssm.in" , "r" , stdin);
freopen("ssm.out" , "w" , stdout);
int n; cin >> n;
int ans = -INF;
int startAns, endAns;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
if (dp[i-1] + a[i] >= a[i])
{
start[i] = start[i-1];
dp[i] = dp[i-1] + a[i];
}
else //
{
start[i] = i;
dp[i] = a[i];
}
// updatam ans
if (ans < dp[i])
{
ans = dp[i];
startAns = start[i];
endAns = i;
}
}
cout << ans << ' ' << startAns << ' ' << endAns << '\n';
}