Cod sursa(job #2276018)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 3 noiembrie 2018 22:01:32
Problema Subsecventa de suma maxima Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
#include<iostream>
#include<fstream>

using namespace std;

int S;
int i1,i2;

int maxS, maxBegin, maxEnd;

void sumamaxima(int* a,int n){
	maxS=a[0], maxBegin=0, maxEnd=0;
	int prevS=a[0], prevBegin=0;
	int crtS;
	for(int i=1;i<n;i++){
		if(prevS<0){
			crtS=a[i];
			if(crtS>maxS){
				maxS=crtS; maxBegin=i; maxEnd=i;
			}	
			prevBegin=i;
		}
		else{
			if(prevS>0){
				crtS=prevS+a[i];
				if(crtS>maxS){
					maxS=crtS; maxBegin=prevBegin; maxEnd=i;
				}
				else{
					if(crtS==maxS){
						if(prevBegin<maxBegin){
							maxBegin=prevBegin; maxEnd=i;
						}	
					}
				}
			}
		}
		prevS=crtS;
	}
}

int main(){
	int N;

	ifstream input("ssm.in");
	ofstream output("ssm.out");

	input >> N;
	int* v=new int[N];

	for(int i=0;i<N;i++){
		input >> v[i];
	}

	sumamaxima(v,N);

	output << maxS << " ";
	output << maxBegin+1 << " ";
	output << maxEnd+1;

	input.close();
	output.close();
	return 0;
}