Pagini recente » Cod sursa (job #3214904) | Cod sursa (job #2661122) | Cod sursa (job #1643619) | Cod sursa (job #2064059) | Cod sursa (job #417581)
Cod sursa(job #417581)
#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 = 0; i < n; ++i )
fin >> S[i];
DEI(0, n - 1);
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;
}