Cod sursa(job #541341)

Utilizator andreioneaAndrei Onea andreionea Data 25 februarie 2011 01:11:31
Problema Subsecventa de suma maxima Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>
#include<limits.h>
#include<stdlib.h>
#define BUF_SIZE 60000*1024

void read(char *filename, int *start, int *end, long *sum)
{
	FILE *f = fopen(filename,"rb");
	int i,aux,n;
	long sumc = 0;
	int st = 0;
	*start = *end = 0;
	char *buf = (char*)malloc(BUF_SIZE);
	setbuf(f,buf);
	*sum = 0;
	fscanf(f,"%ld",&n);
	for(i = 0; i<n; ++i){
		fscanf(f,"%ld",&aux);
		if(sumc+aux > aux){
			sumc += aux;
		}
		else
		{
			sumc = aux;
			st = i;
		}
		if(sumc > *sum){
			*sum = sumc;
			*start = st;
			*end = i;
		}
	}
	fclose(f);
	free(buf);
}

int main()
{
	int start, end;
	long sum;
	FILE *f = fopen("ssm.out","w");
	read("ssm.in",&start,&end, &sum);
	fprintf(f,"%ld %d %d\n",sum, start+1, end+1);
	fflush(stdout);
	fclose(f);
	return 0;
}