Cod sursa(job #2454585)

Utilizator red_devil99Mancunian Red red_devil99 Data 9 septembrie 2019 14:03:44
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
	
#include <fstream>
	
using namespace std;
	
#define maxn 6000000
	
#define inf 1 << 30
	
int suma_max(int a[maxn], int n, int &inceput, int &final){
	
	int sum[maxn], best[maxn];
	
	sum[0] = 0;
	
	for(int i = 1; i <= n; i++){
	
		sum[i] = a[i] + sum[i-1];
	
	}
	
    int ok = 0; 
	
    int max = -99999;
	
    for(int i = 1; i <= n; i++){
	
		if(a[i] > 0){
	
			ok = 1;
	
		}
	
	}
	
	if(ok == 0){
	
       for(int i = 1; i <= n; i++){
	
       	if(max < a[i]){
	
       		max = a[i];
	
       		inceput = final = i;
	
       	}
	
       }
	
       return max;
	
	}
	
 
	
	int inceput_temp = 1;
	
	int min = sum[0];
	
	int bestsum = -inf;
	
	for(int i = 1; i <= n; i++){
	
		best[i] = sum[i] - min;
	
		if(min > sum[i]){
	
			min = sum[i];
	
			inceput_temp = i + 1;
	
		}
	
		if(bestsum < best[i]){
	
		     bestsum = best[i];
	
		     inceput = inceput_temp;
	
		     final = i;
	
		}
	
 
	
	}
	
	return bestsum;
	
}
	
 
	
int main(){
	
 
	
	ifstream fin("ssm.in");
	
	ofstream fout("ssm.out");
	
	int a[maxn], n, inceput, final;
	
	int bestsum;
	
	fin >> n;
	
	for(int i = 1; i <= n; i++){
	
		fin >> a[i];
	
	}
	
	bestsum = suma_max(a, n, inceput, final);
	
	fout <<bestsum<<" "<<inceput<<" "<<final<<'\n';
	
	return 0;
	
}