Cod sursa(job #2649884)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 16 septembrie 2020 18:28:55
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <queue>
using namespace std;

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

int a[6000100];


#define dim 8192
char ax[dim];
int pz;

inline void cit(int &x)
{
       x = 0;
       int ms = 1;
       while(ax[pz]  < '0' || ax[pz] > '9')
       {
         if(ax[pz] == '-') ms = -1;
         if(++pz == dim) in.read(ax,dim),pz = 0;
       }

        while(ax[pz] >= '0' && ax[pz] <= '9')
       {
              x  = x * 10 + ax[pz] - '0';
              if(++pz == dim) in.read(ax,dim),pz = 0;
       }

       x= x*ms;
}

int main()
{
    int n;
    cit(n);

    int  mini = 0;
    int poz_min = 0;
    a[0] = 0;
    cit(a[1]);

    int inc = 1;
    int sf = 1;
    int sum_max = a[1];

    if(a[1] < mini)
    {
        mini = a[1];
        poz_min = 1;
    }

    for(int i = 2; i<=n; ++i)
    {

        cit(a[i]);
        a[i] += a[i-1];

        int cand_max = a[i] - mini;

        if(cand_max > sum_max)
        {
            sum_max = cand_max;
            inc = poz_min+1;
            sf = i;
        }

        if(a[i] < mini)
        {
            mini = a[i];
            poz_min = i;
        }
    }

    g<<sum_max<<" "<<inc<<" "<<sf<<"\n";

    return 0;
}