Pagini recente » Cod sursa (job #1101182) | Cod sursa (job #2625443) | Cod sursa (job #1416399) | Cod sursa (job #1957824) | Cod sursa (job #2274888)
#include <iostream>
#include <fstream>
using namespace std;
int v[100];
struct secventa
{
int l;
int r;
int sum;
};
secventa divide(int left,int right)
{
int m=(left+right)/2;
if(left==right)
{
secventa a;
a.sum=v[left];
a.l=left;
a.r=right;
return a;
}
int cl=left;
int cm=m;
int cr=right;
secventa r1,r2;
r1=divide(left,m);
r2=divide(m+1,right);
secventa sleft,sright;
sleft.sum=0;
sleft.l=0;
sleft.r=m;
sright.l=m+1;
sright.r=0;
sright.sum=0;
int s=0;
secventa r3;
r3.sum=0;
r3.l=0;
r3.r=0;
for(int i=m;i>=left;i--)
{
s=s+v[i];
if(sleft.sum<s)
{
sleft.sum=s;
sleft.l=i;
}
}
s=0;
for(int i=m+1;i<=right;i++)
{
s+=v[i];
if(sright.sum<s)
{
sright.sum=s;
sright.r=i;
}
}
r3.sum=sleft.sum + sright.sum;
r3.l = sleft.l;
r3.r = sright.r;
if(r1.sum >r2.sum)
{
if(r1.sum > r3.sum)
return r1;
else return r3;
}
else
{
if(r2.sum<r3.sum)
return r3;
else return r2;
}
}
int main()
{
int n;
ifstream f("ssm.in");
ofstream g("ssm.out");
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
secventa suma=divide(1,n);
g<<suma.sum<<" "<<suma.l<<" "<<suma.r;
return 0;
}