Cod sursa(job #2558545)

Utilizator anabatAna Batrineanu anabat Data 26 februarie 2020 17:16:32
Problema Subsecventa de suma maxima Scor 75
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <stdio.h>
using namespace std;

#define NMAX 6000000
int s[NMAX+10];
int v[NMAX+10], l[NMAX+10];

int max (int a,int b){
  if(a>b){
    return a;
  }
  return b;
}

int main()
{
  FILE *fin,*fout;
  fin=fopen("ssm.in","r");
  fout=fopen("ssm.out","w");

  int n,i,MAX,inceput,sfarsit,MIN;
  fscanf(fin,"%d",&n);
  for(i=1;i<=n;i++){
    fscanf(fin,"%d",&v[i]);
  }
  for(i=1;i<=n;i++){
    s[i]=max(s[i-1]+v[i],v[i]);
    if(s[i]==s[i-1]+v[i]){
      l[i]=l[i-1]+1;
    }
    else{
      l[i]=1;
    }
  }
  MAX=-1;
  MIN=6000000;
  for(i=1;i<=n;i++){
    if(s[i]>MAX){
      MAX=s[i];
      MIN=l[i];
      inceput=i-l[i];
      sfarsit=i;
    }
    if(s[i]==MAX&&l[i]<MIN){
      inceput=i-l[i];
      sfarsit=i;
    }
  }
  fprintf(fout,"%d %d %d",MAX,inceput+1,sfarsit);

  fclose(fin);
  fclose(fout);
  return 0;
}