Pagini recente » Cod sursa (job #208733) | Cod sursa (job #1289246) | Rating Meici Vlad Alexandru (meicilx) | Cod sursa (job #1962274) | Cod sursa (job #822844)
Cod sursa(job #822844)
// Implementare dupa Stroe Marius
// SSM - Divide et impera - 85 pct
#include <fstream>
#define mx 7000004
using namespace std;
const char iname[] = "ssm.in";
const char oname[] = "ssm.out";
ifstream f(iname);
ofstream g(oname);
int a[mx] , n , Smax = -int(2e9) , in , sf;
void div_imp ( int st , int dr )
{
if ( st == dr )
{
if ( Smax < a[ dr ] )
Smax = a[ dr ] , in = sf = dr;
return ;
}
// I - Divide
int mij = ( st + dr ) / 2;
div_imp ( st , mij );
div_imp ( mij + 1 , dr );
// II - Conquer
int st2 , dr2 , Sact = 0 , before = 0;
int max_Sact = -int(1e9) , max_before = -int(1e9);
for ( int i = mij; i >= st; --i )
{
Sact += a[ i ];
if ( max_Sact <= Sact ) max_Sact = Sact , st2 = i;
}
for ( int i = mij + 1; i <= dr; ++i )
{
before += a[ i ];
if ( max_before < before ) max_before = before , dr2 = i;
}
// III - Conditie_Veritas
if ( max_before + max_Sact > Smax )
Smax = max_before + max_Sact , in = st2 , sf = dr2;
}
int main()
{
f >> n;
for ( int i = 1; i <= n; ++i ) f >> a[ i ];
div_imp ( 1 , n );
g << Smax << ' ' << in << ' ' << sf << '\n';
return 0;
}