Pagini recente » Cod sursa (job #75987) | Cod sursa (job #298686) | Cod sursa (job #1778326) | Cod sursa (job #54642) | Cod sursa (job #2798078)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("ssm.in");
ofstream fout ("ssm.out");
struct ssm{
int sum,l,r;
};
int n,a[6000001];
ssm solve (int a[],int l,int r)
{
if (l==r) {return {a[l],l,r};}
int mid=(l+r)/2;
ssm ssml=solve(a,l,mid);
ssm ssmr=solve(a,mid+1,r);
int sum=0,msum=-2147483647,bestst,bestdr;
for (int st=mid;st>=l;st--)
{
sum+=a[st];
if (sum>msum) {msum=sum;
bestst=st;}
}
int bestsum=msum;
sum=0,msum=-2147483647;
for (int dr=mid+1;dr<=r;dr++)
{
sum+=a[dr];
if (sum>msum) {msum=sum;
bestdr=dr;}
}
bestsum+=msum;
ssm sol;
if (ssml.sum>=ssmr.sum) sol=ssml;
else sol=ssmr;
if (bestsum>sol.sum) sol={bestsum,bestst,bestdr};
else if (bestsum==sol.sum && (bestst<sol.l || (bestst==sol.l && bestdr<sol.r))) sol={bestsum,bestst,bestdr};
return sol;
}
int main()
{
fin >>n;
for (int i=1;i<=n;i++)
{fin >>a[i];}
ssm answer=solve(a,1,n);
fout <<answer.sum<<' '<<answer.l<<' '<<answer.r;
return 0;
}