Cod sursa(job #1461841)

Utilizator SilverShiftDeniz Ozguluk SilverShift Data 16 iulie 2015 15:40:44
Problema Buline Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<cstdio>
using namespace std;
int x[10001];
int main ()
{
    freopen("buline.in","r",stdin);
    freopen("buline.out","w",stdout);
    int im,sfm,ic,n,sc,i,smax2,valoare,culoare,st=0,smin,smax,imin,sfmin,icmin,scmin;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&valoare,&culoare);
        if(culoare==0)
        x[i]=-1*valoare;
        else
        x[i]=valoare;
        st+=x[i];
    }
    //sumamax
    sc=smax=x[1];
    ic=im=sfm=1;
    for(i=2;i<=n;i++)
    {
        if(sc+x[i]<x[i])
        {
            sc=x[i];
            ic=i;
        }
        else
        sc=sc+x[i];
        if(sc>smax)
        {
            smax=sc;
            im=ic;
            sfm=i;
        }
    }
    scmin=smin=x[i];
    imin=icmin=sfmin=1;
    for(i=2;i<=n;i++)
    {
        if(scmin+x[i]>x[i])
        {
            scmin=x[i];
            icmin=i;
        }
        else
        scmin+=x[i];
        if(scmin<smin)
        {
        smin=scmin;
        imin=icmin;
        sfmin=i;
        }
    }
    smax2=st-smin;
    if(smax2>smax)
    {
        printf("%d %d %d",smax2,(sfmin+1)%n,n-(sfmin-imin+1));
    }
    else
    printf("%d %d %d",smax,im,sfm-im+1);
    return 0;
}