Cod sursa(job #1412226)

Utilizator AndreosAndrei Otetea Andreos Data 1 aprilie 2015 10:36:09
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>

using namespace std;
int v[200005];
int main()
{
    freopen("buline.in","r",stdin);
    freopen("buline.out","w",stdout);
    int n,i,c,sc,stc,stmax,endmax,smax,sc1,stc1,stmax1,smax1,endmax1,stot=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&v[i],&c);
        if(c==0)
            v[i]=v[i]*-1;
        stot=stot+v[i];
    }
    sc=smax=v[0];
    stc=stmax=endmax=0;
    for(i=1;i<n;i++)
    {
        if(sc+v[i]>v[i])
            sc=sc+v[i];
        else
        {
            sc=v[i];
            stc=i;
        }
        if(sc>smax)
        {
            smax=sc;
            stmax=stc;
            endmax=i;
        }
    }
    sc1=smax1=v[0];
    stc1=stmax1=endmax1=0;
    for(i=1;i<n;i++)
    {
        if(sc1+v[i]<v[i])
            sc1=sc1+v[i];
        else
        {
            sc1=v[i];
            stc1=i;
        }
        if(sc1<smax1)
        {
            smax1=sc1;
            stmax1=stc1;
            endmax1=i;
        }
    }
    if(stot-smax1>smax)
    {
        smax=stot-smax1;
        stmax=(endmax1+1)%n;
        endmax=stmax1-1;
        printf("%d %d %d\n",smax,stmax+1,(n+1)-(stmax-endmax));
    }
    else
        printf("%d %d %d\n",smax,stmax+1,endmax-stmax+1);
    return 0;
}