Cod sursa(job #2787506)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 23 octombrie 2021 16:36:06
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>

using namespace std;

ifstream cin("ssm.in");
ofstream cout("ssm.out");

const int DIM=6000000;

int v[DIM]={0};
int sumP[DIM]={0};

int main()
{
    int n;
    int sumMax=-99999999,sum=0;
    int startPoint=0,endPoint=0,startSecv = 0;
    cin>>n;

    for(int i=0;i<n;i++){
        cin>>v[i];
    }

    for(int i=0;i<n;i++){
        /// check each element
        if(sum<0)
        {
            ///reset
            sum = v[i];
            startSecv = i;
        }
        else
        {
            sum +=v[i];
        }

        /// check secv sum max
        if(sumMax < sum)
        {
            sumMax =  sum;
            startPoint = startSecv ;
            endPoint = i;
        }
    }

    cout<<sumMax<<" "<<startPoint+1<<" "<<endPoint+1;
    return 0;


    sumP[0]=v[0];
    for(int i=1;i<n;i++){
        sumP[i]=sumP[i-1]+v[i];
    }


    for(int i=0;i<n;i++){ ///verificam subsecvente de lungime 1
        //sumMax=max(sumMax,v[i]);
        if(sumMax<v[i]){
            startPoint=i;endPoint=i;
            sumMax=v[i];
        }
    }

    for(int i=1;i<n;i++){
        for(int j=i;j<n;j++){
            if(j-i==0){
                sum+=sumP[j];
            }
            else{
                sum+=(sumP[j]-sumP[j-i-1]);
            }
            //sumMax=max(sumMax,sum);
            if(sumMax<sum){
                startPoint=j-i;
                endPoint=j;
                sumMax=sum;
            }
            sum=0;
        }
    }

    cout<<sumMax<<" "<<startPoint+1<<" "<<endPoint+1;
    return 0;
}