Cod sursa(job #728321)

Utilizator Dragan_ValentinDragan Valentin Dragan_Valentin Data 28 martie 2012 17:24:32
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
	int n,x;
	int i;
	int max=-1;
	int begin,end;
	int min=0;
	int s_min=0;
	int pos_min=0;
	ifstream f("ssm.in");
	f>>n;
	int s=0;
	for (i=1; i<=n; i++) {
		f>>x;
		s+=x;
		//cout<<i<<' '<<x<<' '<<s<<' ';
		if (s-s_min > max) {
			max=s-s_min;
			begin=pos_min+1;
			end=i;
			//cout<<" lowest : "<<s<<' '<<s_min<<' '<<begin<<' '<<end;
		}
		if (s<=s_min && x!=0) { min=x; s_min=s; pos_min=i; }
		//cout<<'\n';
	}
	
	freopen("ssm.out","w",stdout);
	printf("%d %d %d%c",max,begin,end,'\n');	
	
	return 0;
	
	/* Too much usage of memory :
		int a[6.000.000]
		int s[6.000.000]
		int poz[6.000.000] */
	/*for (i=1; i<=n; i++) {
		f>>a[i];
		s[i]=s[i-1]+a[i];
	}
	f.close();
	for (i=0; i<=n; i++)
		cout<<s[i]<<' ';
	
	for (i=1; i<=n; i++) {
		if (a[i] < a[min]) min=i;
		poz[i]=min;
	}
	
	for (i=1; i<=n; i++)
		if (s[i]-s[poz[i]] > max) {
			max=s[i]-s[poz[i]];
			begin=poz[i]+1;
			end=i;
		}
	*/
}