Pagini recente » Cod sursa (job #2070981) | Cod sursa (job #1477993) | Cod sursa (job #428826) | Cod sursa (job #1154206) | Cod sursa (job #2108892)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("ssm.in");
ofstream out ("ssm.out");
int n, maxim, pi, pf;
int arr[6000003], s[6000003];
/*
s[i] = suma maxima a unei subsecvente ce se termina pe pozitia i
s[i] = max( arr[i], arr[i] + s[i - 1] );
*/
/*
p[i] = indicele de inceput al subsecventei de suma maxima ce se termina pe pozitia i
p[i] = p[i - 1], daca arr[i] <= arr[i] + s[i - 1]
i, daca arr[i] > arr[i] + s[i - 1]
*/
int main()
{
in>>n;
for( int i = 1; i <= n; i++ )
in>>arr[i];
s[1] = arr[1];
arr[1] = 1;
for( int i = 2; i <= n; i++ )
if( arr[i] <= arr[i] + s[i - 1] )
{
s[i] = arr[i] + s[i - 1];
arr[i] = arr[i - 1];
}
else
{
s[i] = arr[i];
arr[i] = i;
}
for( int i = 1; i <= n; i++ )
if( maxim < s[i] )
{
maxim = s[i];
pi = arr[i];
pf = i;
}
out<<maxim<<" "<<pi<<" "<<pf;
return 0;
}