Pagini recente » Cod sursa (job #3286832) | Cod sursa (job #417587)
Cod sursa(job #417587)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
const int MAX = 7000005;
const int MIN = -7000005;
int S[MAX], n, S_max = MIN, beg, end;
void DEI(int l, int r);
int main()
{
fin >> n;
for( int i = 1; i <= n; ++i )
fin >> S[i];
DEI( 1, n );
fout << S_max << ' ' << beg << ' ' << end << '\n';
fin.close();
fout.close();
return 0;
}
void DEI( int l, int r )
{
if( l == r )
{
if( S_max < S[r] )
S_max = S[r], beg = end = r;
return;
}
int mj = (r + l) / 2;
DEI( l, mj );
DEI( mj + 1, r );
int suf = 0, pre = 0, left, right;
int maxSuf = MIN, maxPre = MIN;
for ( int i = mj; i >= l; -- i )
{
suf += S[i];
if ( maxSuf <= suf ) maxSuf = suf, left = i;
}
for ( int i = mj + 1; i <= r; ++ i )
{
pre += S[i];
if ( maxPre < pre ) maxPre = pre, right = i;
}
if ( maxPre + maxSuf > S_max )
S_max = maxPre + maxSuf, beg = left, end = right;
}