Pagini recente » Cod sursa (job #1586827) | Cod sursa (job #2336890) | Cod sursa (job #1245584) | Cod sursa (job #2110759) | Cod sursa (job #2108885)
#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], p[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];
p[1] = 1;
for( int i = 2; i <= n; i++ )
if( arr[i] <= arr[i] + s[i - 1] )
{
s[i] = arr[i] + s[i - 1];
p[i] = p[i - 1];
}
else
{
s[i] = arr[i];
p[i] = i;
}
for( int i = 1; i <= n; i++ )
if( maxim < s[i] )
{
maxim = s[i];
pi = p[i];
pf = i;
}
out<<maxim<<" "<<pi<<" "<<pf;
return 0;
}