Cod sursa(job #2174041)

Utilizator AdryanR8iurian adrian razvan AdryanR8 Data 16 martie 2018 10:31:21
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
/*#include <iostream>
#include <fstream>
using namespace std;

int v[100001];

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

int main(){
    int n;
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>v[i];
        a[i]=a[i-1]+v[i];
    }

    for(int i=1;i<=n;++i){
        for(int j=i;j<=n;++j){
            for(int k=i;k<=j;++k){
                sum=sum+v[k];           ///operatia 1
                if(sum>summax)          ///operatia 2
                    summax=sum          ///op 3
                    ///indici
            }
        }
    }
    for(int i=1;i<=n;++i){
        for(int j=i;j<=n;++j){
            sum = sp[j]-sp[i+1];

            if(sum>summax)          ///operatia 2
                    summax=sum          ///op 3
                    ///indici
        }
    }
    for(int i=1;i<=n;++i){
        ///stim cat e sp[i]

        sum = sp[i]-spmin; /// suma maxima cu capatul din dr pe pozitia i

        if(sum>summax){
            ///update-urile

            stmax = pozmin;
            drmin = i;
        }
        spmin = min(spmin,sp[i]); ///updatam suma partiala pana la poz a
        ///pozspmin =
    }

    return 0;
}*/
#include <iostream>
#include <fstream>
using namespace std;

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

int n,v[6000010],i,smax=-2111111111,a,first_ind,last_ind,minim=1000010000;

int main(){
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>v[i];
    }
    for(i=1;i<=n;i++){
        v[i]+=v[i-1];
        if(smax<v[i]-minim){
            smax=v[i]-minim;
            first_ind=a+1;
            last_ind=i;
        }
        if(v[i]<minim){
            minim=v[i];
            a=i;
        }
    }
    fout << smax << " " << first_ind << " " << last_ind;
    return 0;
}