Cod sursa(job #2652155)

Utilizator irimia_alexIrimia Alex irimia_alex Data 24 septembrie 2020 14:58:26
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct maxSum {
    int s, i, j;
};

int max(vector<int>& v) {
    int m = 0;
    for (int i = 1;i < v.size();++i)
        if (v[i] > v[m]) m = i;
    return m;
}

maxSum ssm(vector<int>& v) {

    int m = max(v);
    if (v[m] < 0) return { v[m],m,m };

    int n = v.size();
    int smax = 0, begin = 0, end = -1;
    int i = 0, s = v[0];
    for (int j = 1;j < n;++j) {
        s += v[j];
        while (s < 0)
            s -= v[i++];
        if (s > smax) {
            smax = s;
            begin = i;
            end = j;
        }
    }
    return { smax,begin,end };
}

int main() {
    
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");

    int n;
    vector<int> v;
    fin >> n;
    while (n--) {
        int x;
        fin >> x;
        v.push_back(x);
    }

    maxSum r = ssm(v);
    fout << r.s << ' ' << r.i + 1 << ' ' << r.j + 1;

    return 0;
}