Cod sursa(job #1526685)

Utilizator tc_iuresiures tudor-cristian tc_iures Data 17 noiembrie 2015 00:27:49
Problema Subsecventa de suma maxima Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

const int Nmax = 6000005;
const int INF  = 2000000000;

int iMax=1, jMax, sMax, Min;
int D[Nmax], N;
int sum[Nmax], best[Nmax];

void citire()
{
   ifstream f("ssm.in");
   f >> N;
   for(int i = 1; i <= N; i ++)
   {
      f >> D[i];
   }
   f.close();
}

void solve()
{
   sum[0] = 0;
   for(int i = 1; i <= N; i ++)
   {
      sum[i] = sum[i-1]+D[i];
   }
   Min  = sum[0];
   int iMin = 1;
   sMax = -INF;
   for(int i = 1; i <= N; i ++)
   {
      best[i] = sum[i] - Min;
      if(sum[i] < Min)
      {
         Min = sum[i];
         iMin = i+1;
      }
      if(best[i] > sMax)
      {
         sMax = best[i];
         jMax = i;
         if(iMin <= jMax)
         {
            iMax = iMin;
         }
      }
   }
}

void print()
{
   ofstream g("ssm.out");
   g << sMax << " " << iMax << " " << jMax;
   g.close();
}

int main()
{
    citire();
    solve();
    print();
    return 0;
}