Pagini recente » Cod sursa (job #996449) | Monitorul de evaluare | Cod sursa (job #2269845)
#include <iostream>
#include <fstream>
using namespace std;
int cl,cr;
int divide(int left,int right,int v[100])
{
int m=(left+right)/2;
int r1,r2,r3;
if(m==right)
return v[m];
r1=divide(left,m,v);
r2=divide(m+1,right,v);
int s=0,sleft=0,sright=0;
for(int i=m;i>=left;i--)
{
s=s+v[i];
if(sleft<s)
{
sleft=s;
cl=i;
}
}
s=0;
for(int i=m+1;i<=right;i++)
{
s+=v[i];
if(sright<s)
{
sright=s;
cr=i;
}
}
r3=sleft+sright;
int maxi;
if(r1>r2)
{
if(r1>r3)
return r1;
else
{
if(r1<r3)
return r3;
}
}
else
{
if(r2<r3)
return r3;
else r2;
}
}
int main()
{
int n,v[100];
ifstream f("ssm.in");
ofstream g("ssm.out");
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
int sum=divide(1,n,v);
g<<sum<<" "<<cl<<" "<<cr;
return 0;
}