Cod sursa(job #1517993)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 5 noiembrie 2015 09:52:18
Problema Teren Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <fstream>

using namespace std;

int n,i,v[200001],s,minim,p,u,x,y,pmax,umax,s2,ap,ap2,maxi;

ifstream fin ("buline.in");

ofstream fout ("buline.out");

int main (){

    fin>>n;
    s2 = 0;
    maxi = -2000000001;
    for (i=1;i<=n;i++){
        fin>>x>>y;
        if (y == 0){
            v[i] = -x;
            ap2++;
            if (v[i] > maxi){
                maxi = v[i];
                p = i;
            }
        }
        else{
            v[i] = x;
            ap++;
        }
        s2 +=v[i];
    }
    if (ap2 == 0){
        fout<<s2<<" "<<1<<" "<<n;
        return 0;
    }
    if (ap == 0){
        fout<<maxi<<" "<<p<<" "<<1;
        return 0;
    }
    minim = 2000000001;
    s = 0;
    p = 1;
    for (i=1;i<=n;i++){
        if (s + v[i] <= v[i]){
            s+=v[i];
        }
        else{
            s = v[i];
            p = i;
        }
        if (s < minim){
            minim = s;
            pmax = p;
            umax = i;
        }
    }
    if (pmax == 1){
        for (i=n;i>=umax+1;i--){
            if (s+v[i] <= v[i])
                s+=v[i];
            else{
                s = v[i];
                p = i;
            }
            if (s < minim){
                minim = s;
                pmax = p;
                umax = i;
            }
        }
    }
    if (umax == n){
        for (i=1;i<=pmax-1;i++){
            if (s + v[i] <= v[i])
                s+=v[i];
            else{
                s = v[i];
                p = i;
            }
            if (s < minim){
                minim = s;
                pmax = p;
                umax = i;
            }
        }
    }
    //fout<<s2<<" "<<minim<<" "<<pmax<<" ";
    if (pmax <= umax)
        fout<<s2-minim<<" "<<umax+1<<" "<<n-(umax-pmax+1);
    else
        fout<<s2-minim-1<<" "<<umax+1<<" "<<n-(pmax-umax-1);

    return 0;
}