Cod sursa(job #269761)

Utilizator alecmanAchim Ioan Alexandru alecman Data 3 martie 2009 13:21:03
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<stdio.h>

#define INPUT "ssm.in"
#define OUTPUT "ssm.out"
#define NMAX 6000001

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

long N, optim;
long A[ NMAX ];

void readData()
{
  fscanf(fin, "%ld", &N);

  for(long i = 0; i < N; ++i)
    fscanf(fin, "%ld", A+i);
}

void solve()
{
  long start = 0, Pmin = 0, Pmax = 0, Foptim;

  Foptim = A[ 0 ];

  for(long i = 0; i < N; ++i)
  {
    if((A[ i ] < optim + A[ i ]) && i)
      optim += A[ i ];
    else
    {
      optim = A[ i ];
      start = i;
    }

    if(Foptim < optim)
    {
      Foptim = optim;
      Pmin = start;
      Pmax = i;
    }
  }

  fprintf(fout, "%ld %ld %ld\n", Foptim, Pmin+1, Pmax+1);
}

int main()
{
  readData();

  solve();

  fclose(fin);
  fclose(fout);

  return 0;
}