Cod sursa(job #1526686)

Utilizator tc_iuresiures tudor-cristian tc_iures Data 17 noiembrie 2015 00:40:00
Problema Subsecventa de suma maxima Scor 85
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 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];
bool poz;

void citire()
{
   ifstream f("ssm.in");
   poz = false;
   f >> N;
   for(int i = 1; i <= N; i ++)
   {
      f >> D[i];
      if(D[i] >= 0)
      {
         poz = true;
      }
   }
   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;
         iMax = iMin;
      }
   }
}

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

int main()
{
    citire();
    if(poz)
    {
      solve();
    }
    else
    {
      int Min = -INF;
      for(int i = 1; i <= N; i ++)
      {
         if(D[i] > Min)
         {
            Min = D[i];
            iMax = i;
            jMax = i;
            sMax = D[i];
         }
      }
    }
    print();
    return 0;
}