Cod sursa(job #1230720)

Utilizator thinkphpAdrian Statescu thinkphp Data 19 septembrie 2014 09:36:12
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#define FOR(it, b, c) for(int it = (b); it <= (c); it++)
#define FIN "ssm.in"
#define FOUT "ssm.out"
#define MAXN 7000003

using namespace std;

int N, //N(N-1)/2 subsequences
    vec[ MAXN ], 
    best[ MAXN ], 
    bestSum, 
    end;

//function prototypes
void read();
void solve();
int find(int);
int start(int);

int main() {

    read();
    solve(); 

    return(0); 
};

void read() {
  
     ifstream fin( FIN );
     
     fin>>N;

     FOR(i, 1, N) fin>>vec[i];
};

void solve() {

     ofstream fout( FOUT );

     best[ 1 ] = vec[ 1 ];

     bestSum = 0;

     FOR(i, 2, N) {

         best[ i ] = vec[ i ];

         if(vec[ i ] + best[i - 1] > best[ i ])

            best[ i ] = vec[ i ] + best[ i - 1 ];

         if(best[ i ] > bestSum) bestSum = best[ i ], end = i;  
     }

     fout<<bestSum<<" "<<start(end)<<" "<<end;
};

int start(int end) {

    int sum = 0, 
        index = 0;

    for(int i = end; i >= 1; i--) {

        sum += vec[ i ];

        index = i;

        if(sum == bestSum) break;
    } 

    return index;
};