Cod sursa(job #267409)

Utilizator Addy.Adrian Draghici Addy. Data 27 februarie 2009 11:32:53
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#define DIM 6000002

int v[DIM],S[DIM];
int n,i,max,begin,end;

// S[i] = vectorul de sume partiale
// complexitatea O(n)

int main(){

  FILE *f = fopen("ssm.in", "r");
  FILE *g = fopen("ssm.out", "w");

  fscanf(f,"%d",&n);

  for (i=1;i<=n;i++)
    fscanf(f,"%d",&v[i]);

  S[1]=v[1];
  begin=1;
  end=1;
  max=v[1];

  for (i=2;i<=n;i++) {
    if (S[i-1]+v[i] > v[i]) {
      S[i]=S[i-1]+v[i];
      if (S[i] > max) {
	max=S[i];
	end=i;
      }
      if (S[i]==max) {
	if (i-begin+1 < end-begin+1)
	  end=i;
      }
    }
    else {
      S[i]=v[i];
      if (S[i] > max) {
	max=S[i];
	begin=i;
	end=i;
      }
      if (S[i]==max) {
	if (i-begin+1 < end-begin+1)
	  end=i;
      }
    }
  }

  fprintf(g,"%d\n",max);

  for (i=begin;i<=end;i++)
    fprintf(g,"%d ",v[i]);

  fclose(f);
  fclose(g);

  return 0;
}