Cod sursa(job #2445555)

Utilizator alexoloieriAlexandru Oloieri alexoloieri Data 4 august 2019 16:27:44
Problema Subsecventa de suma maxima Scor 75
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#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;
}