Cod sursa(job #2849869)

Utilizator MihaiCostacheCostache Mihai MihaiCostache Data 15 februarie 2022 21:27:55
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
long long int n, x, v[6000001], i_sol, j_sol;
pair <long long int, long long int > dp[6000001];
///dp[i].first secv de suma maxima care se termina in i
/// dp[i].second unde incepe exact subsecventa cu suma max
int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    ///optimizam la o(n) cu dinamica
    ///dp[i]=subsecventa de suma maxima care se termina la pozitia i
    int maxim=-INF;
    for(int i=1; i<=n; i++)
    {
        if(dp[i-1].first<0)
        {
            dp[i].first=v[i];
            dp[i].second=i;
        }
        else
        {
            dp[i].first=dp[i-1].first+v[i];
            dp[i].second=dp[i-1].second;
        }
        if(dp[i].first>maxim)
        {
            i_sol=i;
            maxim=dp[i].first;
        }
    }
    maxim=-INF;
    for(int i=1; i<=n; i++)
    {
        if(dp[i].first>maxim)
        {
            maxim=dp[i].first;
            i_sol=dp[i].second;
            j_sol=i;
        }
    }
    fout<<maxim<<" "<<i_sol<<" "<<j_sol;
    return 0;
}