Pagini recente » Cod sursa (job #3246324) | Cod sursa (job #842871) | Cod sursa (job #2192856) | Cod sursa (job #1170868) | Cod sursa (job #2274857)
#include <fstream>
#include <climits>
#define nmax 6000005
using namespace std;
int v[nmax];
int Smax=INT_MIN,stMax,drMax;
void divide(int st, int dr)
{
int mij=(st+dr)/2;
if (st==dr)
return;
divide(st,mij);
divide(mij+1,dr);
int stmax,drmax,sum=0,i,st_suMax,dr_suMax;
st_suMax=INT_MIN;
sum=0;
for (i=mij;i>=st;i--)
{
sum+=v[i];
if (sum>st_suMax)
{
st_suMax=sum;
stmax=i;
}
}
dr_suMax=INT_MIN;
sum=0;
for (i=mij+1;i<=dr;i++)
{
sum+=v[i];
if (sum>dr_suMax)
{
dr_suMax=sum;
drmax=i;
}
}
if (st_suMax+dr_suMax>Smax)
{
Smax=st_suMax+dr_suMax;
stMax=stmax;
drMax=drmax;
}
}
int main()
{
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n,i;
fin>>n;
for (i=1;i<=n;i++)
fin>>v[i];
divide(1,n);
fout<<Smax<<' '<<stMax<<' '<<drMax<<'\n';
fin.close();
fout.close();
return 0;
}