Cod sursa(job #481965)

Utilizator marius21Marius Petcu marius21 Data 2 septembrie 2010 09:56:49
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#include <cstdlib>
#include <limits.h>

FILE *fin=fopen("ssm.in","r");
FILE *fout=fopen("ssm.out","w");

inline bool isgood(char c)
{
	return ((c<='9')&&(c>='0')||(c=='-'));
}

int main (int argc, char * const argv[]) {
	int n;
    fscanf(fin, "%d",&n);
	int smin=0;
	int psmin=-1;
	int spart=0;
	int max=INT_MIN;
	int pi=-1;
	int pf=-1;
	
	for (int i=0; i<n; i++)
	{
		int v=0;
		int sgn=1;
		char c;
		
		while (!isgood(c=fgetc(fin)));
		
		if (c=='-')
		{
			sgn=-1;
			c=fgetc(fin);
		}
		
		do {
			v=v*10+c-'0';
			c=fgetc(fin);
		}while (isgood(c));
		v*=sgn;
		
		spart+=v;
		if (spart-smin>max)
		{
			max=spart-smin;
			pi=psmin;
			pf=i;
		}
		if (spart<smin)
		{
			psmin=i;
			smin=spart;
		}
	}
	fprintf(fout, "%d %d %d\n",max,pi+2,pf+1);
	fclose(fin);
	fclose(fout);
    return 0;
}