Pagini recente » Cod sursa (job #3140269) | Cod sursa (job #2134188) | Cod sursa (job #2836163) | Cod sursa (job #299762) | Cod sursa (job #2568337)
#include <bits/stdc++.h>
using namespace std;
ifstream in;
ofstream out;
/*
in vect sol pe sol[i].first avem suma maxima pana
la pozitia i, iar pe sol[i].second avem pozitia
de inceput a secventei maxima
*/
vector<pair<int, int>> sol;
vector<int> v;
int inc, fin, max1= -INT_MAX, n, s, x;
void kadane()
{
in >> n;
in >> x;
sol.resize(n);
inc = fin = sol[0].second = 0;
max1 = sol[0].first = x;
for (int i = 1; i < n; i++)
{
in >> x;
if (sol[i - 1].first + x > x)
{
sol[i].first = sol[i - 1].first + x;
sol[i].second = sol[i - 1].second;
}
else
{
sol[i].first = x;
sol[i].second = i;
}
if (sol[i].first > max1)
{
inc = sol[i].second;
fin = i;
max1 = sol[i].first;
}
}
}
int main()
{
in.open("ssm.in");
out.open("ssm.out");
kadane();
out << max1 << " " << inc + 1 << " " << fin + 1;
}