Cod sursa(job #2892919)

Utilizator PushkinPetolea Cosmin Pushkin Data 23 aprilie 2022 23:19:27
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;

/// Subsecventa De Suma Maxima Speedrun
/// 3
/// 2
/// 1

void read_input(vector<int> &nums, string filename_in) {
    ifstream in(filename_in);

    size_t N;
    in >> N;

    nums.resize(N);

    for(size_t i = 0; i < N; i++)
        in >> nums[i];

    in.close();
}

vector<int> solve(vector<int> &nums) {
    int max_sum = INT_MIN;
    int max_i, max_j;
    max_i = max_j = 0;

    int crt_sum = 0;
    int crt_i, crt_j;
    crt_i = crt_j = 0;

    for(size_t i = 0; i < nums.size(); i++) {
        if(crt_sum < 0) {
            crt_sum = nums[i];
            crt_i = i;
        } else {
            crt_sum += nums[i];
        }
        crt_j = i;

        if(crt_sum > max_sum) {
            max_sum = crt_sum;
            max_i = crt_i;
            max_j = crt_j;
        }
    }

    return {max_sum, max_i + 1, max_j + 1};
}

void write_output(vector<int> res, string filename_out) {
    ofstream out(filename_out);

    for(int x : res)
        out << x << ' ';

    out.close();
}

int main() {
    vector<int> nums;

    read_input(nums, "ssm.in");

    vector<int> res = solve(nums);

    write_output(res, "ssm.out");

    return 0;
}