Cod sursa(job #1074601)

Utilizator ilenitudorIleni Tudor ilenitudor Data 7 ianuarie 2014 19:31:44
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
using namespace std;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

int s[6000001];
int n,maxx = -999999999,L,l,k;///L=poz finala, l = poz initiala

int main()
{
    int x;
    fin>>n>>k;
    fin>>x;
    s[1] = x;

    for(int i=2 ; i<=n ; i++)
    {
        fin>>x;
        if(s[i-1] + x > x )
        {
            s[i] = s[i-1]+x;
            if(s[i] > maxx)///daca am gasit un maxx in reinitializam, si cautam L(poz initiala)
            {
                maxx=s[i],L=i;
                l = i-1;
                while(s[l]>=0 && l>0) l--;
                l+=1;

            }
            else if(s[i]==maxx)///daca mai gasim inca un max, poz initiala sa fie minima
            {
                int j=i-1;
                while(s[j]>=0 && j>0) j--;
                j+=1;
                    if(j<l)L=i,l=j;
            }
        }
        else
        {
            s[i] = x;
           if(s[i] > maxx)///daca am gasit un maxx in reinitializam, si cautam L(poz initiala)
            {
                maxx=s[i],L=i;
                l = i-1;
                while(s[l]>=0 && l>0) l--;
                l+=1;

            }
            else if(s[i]==maxx)///daca mai gasim inca un max, poz initiala sa fie minima
            {
                int j=i-1;
                while(s[j]>=0 && j>0) j--;
                j+=1;
                    if(j<l)L=i,l=j;
            }
        }
    }

    fout<<maxx<<" "<<l<<" "<<L;
    fin.close();
    fout.close();
    return 0;
}