Cod sursa(job #2909088)

Utilizator baragan30Baragan Andrei baragan30 Data 8 iunie 2022 19:44:27
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>

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

int n;
/*
 * vec  - vector of elements
 * s[k] - the bigest sum vec[i] + vec[i+1]+ ...+ vec[k], i<=k
 *
 */
int *vec,*sum,*firstIndex;
void read(){
    in >> n ;
    vec = new int[n];
    sum = new int[n];
    firstIndex = new int[n];
    for(int i = 0 ; i < n ; i ++){
        in>>vec[i];
    }

}
int solve(){
    int maxSum = 0;
    int indexOfMaxSum = 0;
    sum[0] = vec[0];
    firstIndex[0] = 0;
    for(int i = 1 ; i < n ; i ++){
        int newSum = vec[i] + sum[i-1];
        if(newSum > vec[i]){
            sum[i] = newSum;
            firstIndex[i] = firstIndex[i-1];
        }else{
            sum[i] = vec[i];
            firstIndex[i] = i;
        }
        if(sum[i] > maxSum){
            maxSum = sum[i];
            indexOfMaxSum = i;
        }
    }
    return  indexOfMaxSum;
}
void output(int i){
    out<<sum[i]<<" " <<firstIndex[i] + 1<<" " <<i +1;
    delete[] vec;
    delete[] firstIndex;
    delete[] sum;
}
int main() {
    read();
    output(solve());

    return 0;
}