Cod sursa(job #1815498)

Utilizator gundorfMoldovan George gundorf Data 25 noiembrie 2016 12:24:30
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#define Nmax 6000005
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
/// foloseşte următoarea idee: notând cu Si suma tuturor valorile din şir de pe poziţiile 1 .. i atunci suma maximă a unei subsecvenţe ce se
///termină pe poziţia i este Max(Si - Sj), j < i care este echivalentă cu Si - Min(Sj), j < i. Rezultă că va trebui doar să reţinem minimul dintre toate sumele parţiale Sj cu j < i.
int n,a[Nmax];// in a se retin sumele partiale de la 1 pana l i
void Citire ()
{int x;
    fin>>n;
    for(int i=1;i<=n;i++)
        {fin>>x;
        a[i]=a[i-1]+x;}
}
void Calculare_Ssm()
{
    int i,minim=0,xbun,ybun,xmin,summax=-9999999,maxi;
    minim=a[1];
    xbun=ybun=1;
    xmin=1;
    for (i=2;i<=n;i++)
    { maxi=a[i]-minim;// suma maxima ce se poate obtine din intervalul 1,i este S[i]-min(s[j]),j<=i
        if (maxi>summax) {summax=maxi;xbun=xmin+1;ybun=i;}
        if (a[i]<minim){xmin=i;minim=a[i];}

    }
    fout<<summax<<" "<<xbun<<" "<<ybun;
}
int main()
{
    Citire();
    Calculare_Ssm();
    return 0;
}