Pagini recente » Cod sursa (job #289954) | Cod sursa (job #2470449) | Cod sursa (job #1842644) | Cod sursa (job #2564772) | Cod sursa (job #2794259)
#include <iostream>
using namespace std;
const int NMAX=6000005;
int n, v[NMAX];
int get_sum(int L, int R, int &i, int &j)
{
if(L == R)
{
i = L;
j = L;
return v[L];
}
int p1, p2;
int mid = (L + R) / 2, max_l=0, max_r=0;
int sol=0;
sol = get_sum(L, mid, i, j);
int sum = get_sum(mid+1, R, p1, p2);
if(sol < sum)
sol = sum, i = p1, j = p2;
sum = 0;
for(int st = mid; st >= L; st--)
{
sum += v[st];
if(max_l < sum)
max_l = sum, p1 = st;
}
sum = 0;
for(int dr=mid+1; dr <= R; dr++)
{
sum += v[dr];
if(max_r < sum)
max_r = sum, p2 = dr;
}
if(sol < max_l + max_r)
sol = max_l + max_r, i=p1, j=p2;
return sol;
}
int main(int argc, const char * argv[]) {
cin>>n;
for(int i=1; i<=n; i++)
cin>>v[i];
int i, j, sum = get_sum(1, n, i, j);
cout<<sum<<" "<<i<<" "<<j;
return 0;
}