Cod sursa(job #1828297)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 13 decembrie 2016 00:48:40
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>
using namespace std;
ifstream fin ("buline.in");
ofstream fout("buline.out");
int n,v[200003],s[200003],i,sol,solv,sol1v,sol1,a,b;
long long minim,maxim,pmax,jmax,maxim1,minim1,minimv,maximv,pmaxv,jmaxv,maxim1v,minim1v;
int main(){
    fin>>n;
    s[0]=0;
    for(i=1;i<=n;i++)
    {
        fin>>a>>b;
        if(b==0)
        {
            a*=-1;
        }
        v[i]=a;
    }
    minim=2000000000LL;
    maxim=-2000000000LL;
    maxim1=2000000000LL;
    for(i=1;i<=n;i++)
    {
        s[i]=s[i-1]+v[i];
        if(s[i]>maxim)
        {
            maxim=s[i];
            sol=i;
        }
        if(s[i]!=maxim)
        {
            if(s[i]-maxim<minim)
            {
                minim=s[i]-maxim;
                pmax=sol;
                jmax=i;
            }
        }
    }
    int ok=0;
    for(i=1;i<=n;i++)
    {
        if(v[i]>=0)
        {
            ok=1;
        }
        if(v[i]<maxim1)
        {
            maxim1=v[i];
            sol1=i;
        }
    }
    s[0]=0;
    minimv=2000000000LL;
    maximv=-2000000000LL;
    minim1v=-2000000000LL;
    for(i=1;i<=n;i++)
    {
        s[i]=s[i-1]+v[i];
        if(s[i]<minimv)
        {
            minimv=s[i];
            sol=i;
        }
        if(s[i]!=minimv)
        {
            if(s[i]-minimv>maximv)
            {
                maximv=s[i]-minimv;
                pmaxv=sol;
                jmaxv=i;
            }
        }
    }
    if(ok==1)
        if(maximv>s[n]-minim)
            fout<<maximv<<" "<<pmaxv+1<<" "<<jmaxv-pmaxv;
        else
            fout<<s[n]-minim<<" "<<jmax+1<<" "<<n-(jmax-pmax);
    else
        fout<<s[n]-maxim1<<" "<<sol1-1<<" "<<n-1;
    return 0;
}