Cod sursa(job #645903)

Utilizator tak3rStefan Mirea tak3r Data 10 decembrie 2011 18:01:28
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<cstdio>
#include<vector>

using namespace std;

struct sumInfo{
  int start;
  int length;
  int value;
  
  sumInfo(){
    start   = -1;
    length  = 0;
  }
};

struct sumInfo getSumInfo( int start, int length, int value ){
  struct sumInfo elem;
  elem.start  = start;
  elem.length = length;
  elem.value  = value;
  return elem;
}

void ssm( int a[], int n ){
  vector< struct sumInfo > dp;
  struct sumInfo dummy;
  int max;
  int i;
  
  dp.push_back( getSumInfo( 0, 1, a[0] ) );
  for( i=1; i<n; ++i ){
    if( dp[i-1].value+a[i] => a[i] ){
       dp.push_back( getSumInfo( dp[i-1].start, dp[i-1].length+1, dp[i-1].value+a[i] ) );
    } else {
      dp.push_back( getSumInfo( i, 1, a[i] ) );
    }
  }
  
  max = 0;
  for( i=1; i<n; ++i ){
    if( dp[i].value > dp[max].value ){
      max = i;
    }
  }
  printf( "%d %d %d", dp[max].value, dp[max].start+1, max+1 );
}

int main(){
  
  freopen( "ssm.in", "r", stdin );
  freopen( "ssm.out", "w", stdout );
  
  int n;
  scanf( "%d", &n );
  int a[n];
  for( int i=0; i<n; ++i ){
    scanf( "%d", &a[i] );
  }
  
  ssm( a, n );
  
  return 0;
  
}