Pagini recente » Cod sursa (job #2247508) | Cod sursa (job #2055434) | Cod sursa (job #1649579) | Cod sursa (job #3204709) | Cod sursa (job #2445555)
#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)
{
if (!v.size()) return;
A sum = 0;
maxSum = v[0];
startPos = 1, len = 1;
uint beginn = 0;
for (uint i=0;i<v.size();++i)
{
if (sum < 0)
sum = v[i], beginn = i;
else sum+=v[i];
if (sum > maxSum || (sum == maxSum && len > i - beginn + 1))
maxSum = sum, len = i - beginn + 1, startPos = beginn + 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;
}