Pagini recente » Cod sursa (job #1327575) | Cod sursa (job #2231914) | Cod sursa (job #2500691) | Cod sursa (job #2467013) | Cod sursa (job #2407692)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("ssm.in");
ofstream g ("ssm.out");
int s[6000005], a[6000005];
int summax=-6000000,in, sf, n;
int divide_et_impera(int p, int q)
{
if(p==q)
{
if(summax<a[p])
{
summax=a[p];
in=sf=p;
}
}
else{
int m=(p+q)/2, i;
divide_et_impera(p, m);
divide_et_impera(m+1, q);
int sum=0, st, dr, sufmax=-6000000, premax=-6000000;
for(i=m; i>=p; i--)
{
sum+=a[i];
if(sum>=premax) {premax=sum; st=i;}
}
sum=0;
for(i=m+1; i<=q; i++)
{
sum+=a[i];
if(sum>=sufmax) {sufmax=sum; dr=i;}
}
if(sufmax+premax>summax) {summax=sufmax+premax; in=st; sf=dr;}
}
}
int main()
{
int i, x;
f>>n;
for(i=1; i<=n; i++)
{
f>>x;
a[i]=x;
}
divide_et_impera(1, n);
g<<summax<<" "<<in<<" "<<sf;
return 0;
}