Cod sursa(job #1334560)

Utilizator atoaderAlexandru Toader atoader Data 4 februarie 2015 14:37:08
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;
void read(vector<int>& out_data){
	ifstream f("ssm.in");
	int N, x;
	f >> N;

	for (int i = 0; i < N; i++){
		f >> x;
		out_data.push_back(x);
	}

	f.close();
}

void write(int maxSum, int minIdx, int maxIdx){
	ofstream g("ssm.out");
	g << maxSum << " " << minIdx << " " << maxIdx << std::endl;
	g.close();
}

pair<int, pair<int, int> >  findMax(const vector<int>&data){
	vector<int> sums;
	int begin, end, idx = 0 ;
	int bestSum = numeric_limits<int>::min();
	int sum = 0;

	for (size_t i = 0; i < data.size(); ++i){
		if (sum < 0){
			sum = data[i];
			idx = i;
		}
		else{
			sum += data[i];
		}

		if (sum > bestSum){
			bestSum = sum;
			begin = idx;
			end = i;
		}
	}

	return make_pair(bestSum,make_pair(begin, end));
}


int main(){
	vector<int> data;

	read(data);

	pair<int, pair<int, int> >  result = findMax(data);

	write(result.first, result.second.first + 1, result.second.second + 1);

	return 0;
}