Cod sursa(job #3197789)

Utilizator cacamaca12aasdga cacamaca12 Data 27 ianuarie 2024 14:30:29
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <limits.h>
#define ll long long
using namespace std;
ifstream cin("ssm.in");
ofstream cout("ssm.out");

long long n,smax=LLONG_MIN;
int inc,sf;
vector<ll>V;
vector<pair<ll,int>>Sc;

int main()
{
    cin>>n;
    V.resize(n+1);
    Sc.resize(n+1);

    
    for(int i=1;i<=n;++i) cin>>V[i];
    
    for(int i=1;i<=n;++i){
        // Sc[i]=max(V[i],Sc[i-1]+V[i]);
        // smax=max(smax,Sc[i]);
        
        if(V[i]>Sc[i-1].first+V[i]){
            Sc[i].first=V[i];   // o noua secventa
            Sc[i].second=i;
            
            if(Sc[i].first>smax)
                smax=Sc[i].first;
            
        }else{
            Sc[i].first=Sc[i-1].first+V[i];//continua secventa anterioara
            Sc[i].second=Sc[i-1].second;
            if(Sc[i].first>smax){
                sf=i;
                inc=Sc[i].second;
                smax=Sc[i].first;
            }
        }
        
    }    
    // for(auto x:Sc) cout<<x<<" ";
    cout<<smax<<" "<<inc<<" "<<sf;
    return 0;
}