Pagini recente » Cod sursa (job #2710928) | Cod sursa (job #2499139) | Cod sursa (job #1870202) | Cod sursa (job #2943377) | Cod sursa (job #1645029)
#include <iostream>
#include<fstream>
using namespace std;
int beg,left1,bestsum,s[10000],end,right1,i;
void f(int lo,int hi)
{
if(lo==hi)
{
if(bestsum<s[lo])
bestsum=s[lo],beg=lo,end=lo;
return;
}
int mid=(lo+hi)/2;
f(lo,mid);
f(mid+1,hi);
int pref=0,suf=0,maxpref=-int(1e9),maxsuf=-int(1e9);
for(i=mid;i>=lo;i--)
{
pref=pref+s[i];
if(maxpref<=pref)
{maxpref=pref;left1=i;}
}
for(i=mid+1;i<=hi;i++)
{ suf=suf+s[i];
if(maxsuf<suf)
maxsuf=suf,right1=i;
}
if(maxpref+maxsuf>bestsum)
bestsum=maxpref+maxsuf,beg=left1,end=right1;
}
int main()
{
ifstream fin("ssm.in");int n;
ofstream fout("ssm.out");
fin>>n;
for(int i=1;i<=n;i++)
fin>>s[i];
f(1,n);
fout<<bestsum<<" "<<beg<<" "<<end;
}