Pagini recente » Rating Daria Mihaescu (Daria_0827) | Cod sursa (job #1754745) | Cod sursa (job #172958) | Cod sursa (job #2422592) | Cod sursa (job #2274146)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
vector<int> v;
int n;
void citire()
{
f >> n;
int i;
v.resize(n + 3);
for (i = 1; i <= n; i++)
{
f >> v[i];
}
f.close();
}
int l = 0, r = 0;
long long int M = INT_MIN;
void divide(int left, int right)
{
if (left == right)
{
if (M < v[left])
{
l = r = left;
M = v[left];
}
return;
}
int mid = (left + right) / 2;
divide(left, mid);
divide(mid + 1, right);
long long int r1 = 0, r2 = 0, s = 0, st=0, dr=0;
int i;
for (i = mid; i >= left; i--)
{
s += v[i];
if (s > r1)
{
r1 = s;
st = i;
}
}
s = 0;
for (i = mid + 1; i <= right; i++)
{
s += v[i];
if (s > r2)
{
r2 = s;
dr = i;
}
}
if (r1 + r2 > M)
{
M = r1 + r2;
l = st;
r = dr;
}
}
int main()
{
citire();
divide(1,n);
g << M << " " << l << " " << r << "\n";
g.close();
return 0;
}