Pagini recente » Cod sursa (job #1961912) | Cod sursa (job #2263963) | Cod sursa (job #1260090) | Profil Palescu-Alexandru | Cod sursa (job #645914)
Cod sursa(job #645914)
#include<cstdio>
#include<cstdlib>
#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 = (int*) malloc( n * sizeof( int ) );
for( int i=0; i<n; ++i ){
scanf( "%d", &a[i] );
}
ssm( a, n );
return 0;
}