Pagini recente » Cod sursa (job #1483455) | Cod sursa (job #2216704) | Cod sursa (job #2032303) | Cod sursa (job #2080264) | Cod sursa (job #2273370)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int n;
vector <int> v;
struct raspuns
{
int left, right, sum;
bool operator<(raspuns & other)
{
if(sum<other.sum)
return true;
return false;
}
};
raspuns divide(int left, int right)
{
if(left==right)
{
raspuns r;
r.left=left;
r.right=right;
r.sum=v[left];
return r;
}
int mid=left+(right-left)/2;
raspuns ans1=divide(left,mid);
raspuns ans2=divide(mid+1,right);
int aux=0;
raspuns r1;
r1.sum=0;
for(int p=mid;p>=left;p--)
{
aux+=v[p];
if(aux>r1.sum)
{
r1.sum=aux;
r1.left=p;
}
}
aux=0;
raspuns r2;
r2.sum=0;
for(int p=mid+1;p<=right;p++)
{
aux+=v[p];
if(aux>r2.sum)
{
r2.sum=aux;
r2.right=p;
}
}
raspuns ans3;
ans3.sum=r1.sum+r2.sum;
ans3.left=r1.left;
ans3.right=r2.right;
if(ans1<ans2)
{
if(ans2<ans3)
return ans3;
else return ans2;
}
else
{
if(ans1<ans3)
return ans3;
else return ans1;
}
}
int main()
{
f>>n;
v.resize(n);
for(int i=0;i<n;++i)
f>>v[i];
raspuns r=divide(0,n-1);
g<<r.sum<<' '<<r.left+1<<' '<<r.right+1;
return 0;
}