Cod sursa(job #1113929)

Utilizator nicu701Nicu Badescu nicu701 Data 21 februarie 2014 02:30:43
Problema Subsecventa de suma maxima Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;
int n;
ifstream in("ssm.in");
ofstream out("ssm.out");

int max(int a, int b) {
    return a > b ? a : b;
}

void read_array(vector<int>& v) {
    int tmp;
    in >> n;

    for (int i = 0; i < n; i++) {
        in >> tmp;
        v.push_back(tmp);
    }

    in.close();
}

// S(k) = max(S(k - 1) + v(k), v(k))
void find_ssm(vector<int>&v) {
    int start = 0, end = 0, maximum_sum;
    vector<int> sum;
    sum.resize(n);
    sum[0] = v[0];
    maximum_sum = sum[0];
    for (int i = 1; i < v.size(); i++) {
        sum[i] = max(sum[i - 1] + v[i], v[i]);
        if (sum[i] > maximum_sum) {
            end = i;
            maximum_sum = sum[i];
            if (sum[i] == v[i]) {
                start = i;
            }
        }
    }
    for (int i = start; i < n; i++) {
        if (sum[i] == maximum_sum) {
            end = i;
            break;
        }
    }
    out << maximum_sum << " " << start + 1 << " " <<  end + 1;
}

int main() {
    vector<int> v;
    read_array(v);
    find_ssm(v);
    return 0;
}