Pagini recente » Cod sursa (job #1096548) | Cod sursa (job #362849) | Cod sursa (job #2703894) | Cod sursa (job #1554870) | Cod sursa (job #2445552)
#include <bits/stdc++.h>
using namespace std;
template<class T, class A=T>
class maximumSubsequenceSum
{
private:
#define uint unsigned int
#define maxx(a,b) (a)>(b)?(a):(b)
std::vector<T>v;
public:
maximumSubsequenceSum() {}
void addElement(T &x)
{
v.push_back(x);
}
void clearAll()
{
v.clear();
}
void computeMSS(A &maxSum, uint &startPos, uint &len)
{
A sum = 0;
maxSum = 0;
uint inc = 0, ln = 1;
bool ok = false;
for (uint i=0; i<v.size(); ++i)
{
sum += v[i];
if (sum < 0)
ln = 0, sum = 0;
else
{
ok = true;
++ln;
if (sum > maxSum)
maxSum = sum, len = ln, startPos = i-ln+2;
}
}
if (!ok)
{
maxSum = v[0];
len = 1;
startPos = 1;
for (uint i=0;i<v.size();++i)
if (v[i] < v[0]) startPos = i+1;
}
}
};
int main()
{
int n, x;
freopen("ssm.in","r",stdin);
freopen("ssm.out","w",stdout);
scanf("%d",&n);
maximumSubsequenceSum<int,long long>mss;
for (int i=1; i<=n; ++i)
{
scanf("%d",&x);
mss.addElement(x);
}
long long ans;
unsigned int start, len;
mss.computeMSS(ans,start,len);
cout<<ans<<' '<<start<<' '<<start+len-1<<'\n';
fclose(stdin);
fclose(stdout);
return 0;
}