Cod sursa(job #267424)

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

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

// 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];
  max = v[1];
  begin = 1;
  end = 1;

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

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

  fclose(f);
  fclose(g);

  return 0;
}