Cod sursa(job #2085600)

Utilizator andr3i_kaabAndrei Ciineanu andr3i_kaab Data 10 decembrie 2017 14:36:52
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

/*
// ca  la Savu
int n, a[6000002], suma, maxa, ifix; // viz[];

int main()
{
    int i, j, st, dr;

    f>>n;
    for (i=1; i<=n; i++)
      {
          f>>j;

          if (suma<0)
          {
              suma=j;
              ifix=i;
          }
          else
              suma+=j;

          if (maxa<suma)
          {
              maxa=suma;
              st=ifix;
              dr=i;
          }
      }
    g<<maxa<<" "<<st<<" "<<dr;
    return 0;
}
*/
/*
// recursiv
int n, a[6000002], suma, maxa, ifix;

int main()
{
    int i, j=0, st, dr;

    f>>n;
    for (i=1; i<=n; i++)
      f>>a[i];

    for (i=1; i<=n; i++)
    {
        a[i]+=a[i-1];
        if (maxa<a[i]-j)
        {
            maxa=a[i]-j;
            st=ifix+1;
            dr=i;
        }
        if (j>a[i])
        {
            j=a[i];
            ifix=i;
        }
    }
    g<<maxa<<" "<<st<<" "<<dr;
} */

// pt testul 3 in care un singur element e mai mare ca intreaca suma
int n, a[6000002], suma, maxa, ifix, em, pozi; // viz[];

int main()
{
    int i, j, st, dr;

    f>>n;
    for (i=1; i<=n; i++)
      {
          f>>j;

          if (j>em)
          {
              em=j;
              pozi=i;
          }

          if (suma<0)
          {
              suma=j;
              ifix=i;
          }
          else
              suma+=j;

          if (maxa<suma)
          {
              maxa=suma;
              st=ifix;
              dr=i;
          }
      }
    if (maxa>em)
      g<<maxa<<" "<<st<<" "<<dr;
    else
      g<<em<<" "<<pozi<<" "<<pozi;
    return 0;
}