Cod sursa(job #3224906)

Utilizator aeru1Ianos Alex-Marian aeru1 Data 16 aprilie 2024 15:10:41
Problema Buline Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.1 kb
#include <bits/stdc++.h>

using namespace std;

#define TITLE "buline"
#define ll long long
#define MaxN 100010

ifstream f (TITLE".in");
ofstream g (TITLE".out");

int solve()
{
    int n;
    ll dpmax;
    ll semn;
    f>>n;
    f>>dpmax>>semn;
    if(semn==0)
        dpmax*=-1;
    ll dpmin=dpmax;
    ll maxim=dpmax;
    ll minim=dpmin;
    ll StartPozMax=1, StartPozMin=1, LengthMax=1, LengthMin=1, AnsLenMax=1, AnsLenMin=1, TotalSum=dpmax;
    for(int i=2; i<=n; i++)
    {
        ll a;
        f>>a>>semn;
        if(semn==0)
            a*=-1;
        TotalSum+=a;
        if(dpmax+a>=a)
            {
                dpmax+=a;
                LengthMax++;
            }
        else
            {
                dpmax=a;
                LengthMax=1;
            }
        if(dpmin+a<=a)
        {
            dpmin+=a;
            LengthMin++;
        }
        else
        {
            dpmin=a;
            LengthMin=1;
        }
        if(dpmax>maxim)
        {
            StartPozMax=i;
            AnsLenMax=LengthMax;
            maxim=dpmax;
        }
        if(dpmin<minim)
        {
            StartPozMin=i;
            AnsLenMin=LengthMin;
            minim=dpmin;
        }
    }
    minim=TotalSum-minim;
    if(maxim>minim || minim==0)
    {
        g<<maxim<<' '<<StartPozMax<<' '<<AnsLenMax;
        return 0;
    }
    if(minim>maxim)
    {
        ll help=StartPozMin+AnsLenMin;
        if(help==n+1)
            help=1;
        g<<minim<<' '<<help<<' '<<n-AnsLenMin;
        return 0;
    }
    ll help=StartPozMin+AnsLenMin;
        if(help==n+1)
            help=1;
    if(StartPozMax<help)
    {
        g<<maxim<<' '<<StartPozMax<<' '<<AnsLenMax;
        return 0;
    }
    if(help<StartPozMax)
    {
        g<<minim<<' '<<help<<' '<<n-AnsLenMin;
        return 0;
    }
    if(AnsLenMax<n-AnsLenMin)
    {
        g<<maxim<<' '<<StartPozMax<<' '<<AnsLenMax;
        return 0;
    }
        g<<minim<<' '<<help<<' '<<n-AnsLenMin;
        return 0;
    return 0;
}

int main()
{
    solve();
    return 0;
}