Pagini recente » Cod sursa (job #1656489) | Cod sursa (job #2104939) | Cod sursa (job #563414) | Cod sursa (job #2545866) | Cod sursa (job #2273391)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
vector <int> v;
int n;
long long sol;
int left_1,right_1;
void Citire()
{
int i,x;
fin>>n;
v.push_back(0);
for(i=1;i<=n;++i)
{
fin>>x;
v.push_back(x);
}
}
void Divide(int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
Divide(left,mid);
Divide(mid+1,right);
long long nr_max1=v[mid];
long long nr_max2=v[mid+1];
long long s1=0,s2=0;
int ind1=mid,ind2=mid+1;
for(int i=mid;i>=left;i--)
{
s1+=v[i];
if(nr_max1<=s1){nr_max1=s1; ind1=i;}
}
for(int i=mid+1;i<=right;++i)
{
s2+=v[i];
if(nr_max2<s2){nr_max2=s2; ind2=i;}
}
if(nr_max1+nr_max2>sol)
{
sol=nr_max1+nr_max2;
left_1=ind1;
right_1=ind2;
}
else if(nr_max1+nr_max2==sol)
{
if(ind1<left_1)
{
left_1=ind1;
right_1=ind2;
}
else if(left_1==ind1&&right_1-left_1>ind1+ind2)
{
left_1=ind1;
right_1=ind2;
}
}
}
else if(left==right&&sol<v[left])
{
sol=v[left];
left_1=right_1=left;
}
}
int main()
{
Citire();
Divide(1,n);
fout<<sol<<" "<<left_1<<" "<<right_1<<"\n";
return 0;
}