Cod sursa(job #1670242)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 31 martie 2016 16:31:15
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define DIM 100000

using namespace std;

ifstream in("ssm.in");
ofstream out("ssm.out");
const int NMAX = 6000001;
int a[NMAX];
int sum;
int best,best_left,best_right;
int n;

char buff[DIM];
int poz = 0;
void Read(int &a)
{
    bool mns = false;
    while(!isdigit(buff[poz]))
    {
        if(buff[poz]=='-')
            mns = true;
        if(++poz == DIM)
        in.read(buff,DIM),poz = 0;
    }
    a = 0;
    while(isdigit(buff[poz]))
    {
        a = a*10 + buff[poz]-'0';
        if(++poz == DIM)
            in.read(buff,DIM),poz = 0;
    }
    if(mns)
        a = -a;
}

int main()
{
    int left,right;
    Read(n);
    Read(a[1]);
    sum = a[1];
    best = sum;
    left = 1;
    right = 1;
    best_left = 1;
    best_right = 1;
    for(int i=2;i<=n;i++)
    {
        Read(a[i]);
        if(sum + a[i] < a[i])
           {
               if(best < sum)
               {
                   best = sum;
                   best_left = left;
                   best_right = right;
               }
               sum = a[i];
               left = i;
               right = i;
           }
        else
        {
            sum+=a[i];
            right=i;
        }
        if(best < sum)
               {
                   best = sum;
                   best_left = left;
                   best_right = right;
               }
    }
    in.close();
    out<<best<<" "<<best_left<<" "<<best_right<<"\n";
    out.close();
    return 0;
}