Cod sursa(job #481111)

Utilizator claudiumihailClaudiu Mihail claudiumihail Data 30 august 2010 16:54:44
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<iostream>
#include<vector>

using namespace std;

int main()
{
	long n,x,sum=0,maxsum=-60000;
	fstream fin("ssm.in", fstream::in);
	fstream fout("ssm.out", fstream::out);
	vector<long> sums, bst;
	pair<long, long> min;
	pair<long, long> max;
	
	fin>>n;
	bst.reserve(n);
	for(int i=0; i<n; ++i)
	{
		fin>>x;
		//cout<<x<<" ";
		sum+=x;
		sums.push_back(sum);
	}
	//cout<<endl;
	
	min.first=0;
	min.second=0;//sums[0];
	
	max.first=0;
	maxsum=bst[0]=sums[0];
	for(int i=1; i<n; ++i)
	{
		
		if(sums[i-1]<min.second)
		{
			min.first=i;
			min.second=sums[i-1];
			
		}
		bst[i]=sums[i]-min.second;
		
		//cout<<"("<<min.second<<" "<<bst[i]<<") ";
		
		if(bst[i]>=maxsum)
		{
			max.first=min.first;
			max.second=i;
			maxsum=bst[i];
		}
	}
	
	fout<<maxsum<<" "<<max.first+1<<" "<<max.second+1<<endl;
	//cout<<endl<<maxsum<<" "<<max.first+1<<" "<<max.second+1<<endl;
	
	fin.close();
	fout.close();
	return 0;
}