Pagini recente » Cod sursa (job #1684278) | Cod sursa (job #1603850) | Cod sursa (job #2753262) | Cod sursa (job #1623123) | Cod sursa (job #2562728)
#include <iostream>
using namespace std;
#define INF 2000000009
int v[6000003];
int answer = -INF;
int poz1;
int poz2;
void divide(int left,int right)
{
if(left == right) {
if(v[left]>answer)
{answer=v[left];
poz1=left;
poz2=left;
}
return ;
}
int mij=(left+right)/2;
divide(left,mij);
divide(mij+1,right);
int sp = 0, spmaxL = -INF, spmaxR = -INF, pozL, pozR;
for(int i = mij; i >= left; i--) {
sp = sp + v[i];
if(sp > spmaxL) {
spmaxL = sp;
pozL = i;
}
}
sp = 0;
for(int i = mij + 1; i <= right; i++) {
sp = sp + v[i];
if(sp > spmaxR) {
spmaxR = sp;
pozR = i;
}
}
if(spmaxL + spmaxR > answer) {
answer = spmaxL + spmaxR;
poz1 = pozL;
poz2 = pozR;
}
}
int main()
{
freopen("ssm.in", "r", stdin);
freopen("ssm.out", "w", stdout);
int i,n;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
divide(1,n);
cout<<answer<<" "<<poz1<<" "<<poz2;
return 0;
}