// Standard Header einbinden 
#include <stdio.h> 
#include <stdlib.h>

int main (int argc, char **argv) {
	int *feld; 
   	int n = 10;
	int sum = 0;
	int max, tmpmax; 
	int si, sj,i,j,k;
	FILE *fp; 

	if (argc != 2) {
		printf("Usage: %s filename\n",argv[0]); 
		return -2; 
	}
	if (! (fp = fopen (argv[1],"r")) ) {
		printf("Error Opening file\n"); 
		return -1; 
	}
	fscanf(fp, "%d", &n); 
	feld = (int *) malloc(sizeof(int) * n); 
	printf("Read %d values...", n); 
	for ( i = 0; i < n && !feof(fp); i++){
		fscanf(fp,"%d",&feld[i]); 
	}
	if ( i != n) { printf("Could not read all values\n"); return -3; }
	printf("done.\n"); 
	fclose(fp); 
	
    	max = feld[0];
	tmpmax = feld[0];
	si = sj = 0; 
    
	// Optimale Loesung: das Feld wird nur einmal durchlaufen
	// Verfahren: i wird *festgehalten* j weitergerueckt, 
	// die Elemente zwischen i und j werden aufsummiert
	// erreicht diese Summe einen negativen Wert, so wird beim 
	// naechsten Element neu angefangen mit summieren
	for (i = 1; i < n; i++){
		if ( tmpmax >0) {
			tmpmax = tmpmax + feld[i];
		} else 	{
			tmpmax = feld[i];
			k = i;
	        }
		if (tmpmax >= max) {
			max = tmpmax;
			si = k ; 
			sj = i;
		}
	}
	printf("max S_ij: %d \n",max);
    	printf("->  i = %d to  j = %d \n",si,sj); 
	free(feld); 
    	return 0;
}
