Pagini recente » Cod sursa (job #1133402) | Cod sursa (job #2105223) | Cod sursa (job #1112728) | Cod sursa (job #2791631) | Cod sursa (job #2274166)
#include <iostream>
#include <fstream>
#include <vector>
#include <limits.h>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
vector <int> v;
int maxim = INT_MIN;
int st=0, dr=0;
void secv_sum_maxima(int left, int right)
{
if(left == right)
{
if(maxim < v[left])
{
st = dr = left;
maxim = v[left];
}
return;
}
int mid = (left+right)/2;
secv_sum_maxima(left, mid);
secv_sum_maxima(mid+1, right);
int ans1=0, ans2=0, sum=0, stanga=0, dreapta=0;
int i;
for(i = mid; i>= left; i--)
{
sum += v[i];
if (sum > ans1)
{
ans1 = sum;
stanga = i;
}
}
sum=0;
for(i=mid+1; i<=right; i++)
{
sum += v[i];
if(sum > ans2)
{
ans2 = sum;
dreapta = i;
}
}
if(maxim < ans1+ans2)
{
maxim = ans1+ans2;
st = stanga;
dr = dreapta;
}
else if(maxim == ans1+ans2)
{
if(st > stanga)
{
maxim = ans1+ans2;
st = stanga;
dr = dreapta;
}
else if(st == stanga)
{
if(dr > dreapta)
{
maxim = ans1+ans2;
st = stanga;
dr = dreapta;
}
}
}
}
int main()
{
int n;
fin>>n;
int i;
for(i=1; i<=n; i++)
{
int x;
fin>>x;
v.push_back(x);
}
secv_sum_maxima(0, n-1);
fout<<maxim<<" "<<st+1<<" "<<dr+1;
}