Pagini recente » Cod sursa (job #2727355) | Cod sursa (job #463245) | Cod sursa (job #3265691) | Cod sursa (job #1675316) | Cod sursa (job #1645057)
#include <iostream>
#include<fstream>
using namespace std;
int beg,left1,bestsum,s[7000005],end1,right1,i;
void f(int lo,int hi)
{
if(lo==hi)
{
if(bestsum<s[lo])
bestsum=s[lo],beg=lo,end1=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,end1=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<<" "<<end1;
}