Cod sursa(job #2733262)

Utilizator maria_neagoieMaria Neagoie maria_neagoie Data 30 martie 2021 10:23:53
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <cstdio>
using namespace std;
const int NMAX=200005;
int v[NMAX];
int main()
{
    freopen("buline.in","r",stdin);
    freopen("buline.out","w",stdout);
    int n,i,x,sc,smax,st,dr,stmax,drmax,culoare,lmax,smin,drmin,stmin,s=0,smax2,stmax2,lmax2,drmax2;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&culoare);
        if(culoare==0) //negru
            v[i]=-x;
        else //alb
            v[i]=x;
        s=s+v[i];
    }
    //secv de suma maxima pe dreapta de la 1 la n
    sc=smax=v[1];
    st=stmax=drmax=1;
    for(dr=2;dr<=n;dr++)
    {
        if((sc+v[dr])>=v[dr])
            sc=sc+v[dr];
        else
        {
            sc=v[dr];
            st=dr;
        }
        if(sc>smax)
        {
            smax=sc;
            stmax=st;
            drmax=dr;
        }
    }
    lmax=drmax-stmax+1;
    //secv minima pe dreapta pe care putem sa o scoatem si ramanem cu o secv circulara cat mai mare
    sc=smin=v[1];
    st=stmin=drmin=1;
    for(dr=2;dr<=n;dr++)
    {
        if((sc+v[dr])<v[dr])
            sc=sc+v[dr];
        else
        {
            sc=v[dr];
            st=dr;
        }
        if(sc<smin)
        {
            smin=sc;
            stmin=st;
            drmin=dr;
        }
    }
    smax2=s-smin;
    stmax2=drmin+1;
    drmax2=stmin-1;
    lmax2=drmax2+n-stmax2+1;
    if(smax>smax2)
        printf("%d %d %d",smax,stmax,lmax);
    else
        printf("%d %d %d",smax2,stmax2,lmax2);
    return 0;
}