Cod sursa(job #1538692)

Utilizator sulzandreiandrei sulzandrei Data 29 noiembrie 2015 17:00:44
Problema Subsecventa de suma maxima Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int  N_MAX = 6000003;
#define foreach(i,n) for(int i = 1 ; i <= n ; i ++)
ifstream in("ssm.in");
ofstream out("ssm.out");
struct element
{
    int  value,index,lindex;
    int maxSum;
};
int  sum[N_MAX];
element v[N_MAX];
int main()
{
    int n,x;
    in>>n;
    sum[0] = 0;
    foreach(i,n)
    {
        in>>v[i].value;
        v[i].index = i;
        v[i].lindex = i;
        v[i].maxSum = v[i].value;
        sum[i] = sum[i-1] + v[i].value;
    }
    int minimum_sum_index = 1;
    int minimum_sum = sum[1];
    for(int i = 2 ; i <= n ;  i++)
    {

        v[i].maxSum = sum[i] - minimum_sum;
        v[i].lindex = minimum_sum_index;
        if( sum[i] < minimum_sum)
        {
            minimum_sum = sum[i];
            minimum_sum_index = i;
        }
    }
    int position_max_sum = 1;
    int value_max_sum = v[1].value;
    for(int i = 2 ; i <= n ; i++)
        if (value_max_sum < v[i].maxSum)
        {
            value_max_sum = v[i].maxSum;
            position_max_sum = i;
        }
    out<<value_max_sum<<" "<<v[position_max_sum].lindex+1<<" "<<position_max_sum;
    return 0;
}