Cod sursa(job #2123030)

Utilizator cyg_LucaFlorinTanasescu Luca Florin cyg_LucaFlorin Data 5 februarie 2018 18:42:06
Problema Buline Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <cstdio>

using namespace std;

int v[200005];

int main()
{
    freopen("buline.in","r",stdin);
    freopen("buline.out","w",stdout);
    int n,i,x,y,s,smax=0,st,j,stmax,lmax;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&y);
        if(y==0)
            v[i]=x*(-1);
        else
            v[i]=x;
    }
    s=v[1];
    st=1;
    for(i=2;i<=n;i++)
    {
        if(i==n)
        {
            if(s+v[i]>=v[i])
            {
                s=s+v[i];
                j=1;
                while(j<st)
                {
                    if(s+v[j]>=v[j])
                        s=s+v[j];
                    else
                        break;
                    if(s>smax)
                    {
                        stmax=st;
                        smax=s;
                        lmax=j+n-st+1;
                    }
                    else
                        if(s==smax)
                        {
                            if(stmax>st)
                            {
                                stmax=st;
                                lmax=j+n-st+1;
                            }
                            else
                                if(stmax==st&&lmax>j+n-st+1)
                                    lmax=j+n-st+1;
                        }
                    j++;
                }
            }
            else
            {
                st=1;
                s=v[i];
            }
        }
        else
        {
            if(s+v[i]>=v[i])
                s=s+v[i];
            else
            {
                st=i;
                s=v[i];
            }
        }
        if(s>smax)
        {
            stmax=st;
            smax=s;
            lmax=i-st+1;
        }
        else
            if(s==smax)
            {
                if(stmax>st)
                {
                    stmax=st;
                    lmax=i-st+1;
                }
                else
                    if(stmax==st&&lmax>i-st+1)
                        lmax=i-st+1;
            }
    }
    printf("%d %d %d",smax,stmax,lmax);
    return 0;
}