Cod sursa(job #1640014)

Utilizator T.C.11Tolan Cristian T.C.11 Data 8 martie 2016 15:19:38
Problema Buline Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#define INF 1000000000
#define MAXN 200001

using namespace std;

ifstream fin("buline.in");
ofstream fout("buline.out");

int suma,sumaMax,x,posMin,lung,lungMin,n,i,v[MAXN],val,st;

int main()
{
    fin>>n;
    suma = -INF;
    lungMin = -INF;
    sumaMax = -INF;
    posMin = INF;
    for (i=1;i<=n;i++)
    {
        fin>>val>>x;
        if (x == 0)
            v[i] = -val;
        else
            v[i] = val;
    }
    for (int j=1;j<=2;j++)
        for (i=1;i<=n;i++)
        {
            if (suma < 0)
            {
                suma = v[i];
                st = i;
            }
            else
            {
                suma += v[i];
            }
            if (i >= st && j == 1)
                lung = i - st + 1;
            else
                lung = i + n - st + 1;

            if (suma > sumaMax && lung <= n)
            {
                sumaMax = suma;
                posMin = st;
                lungMin = lung;
            }
            else if (suma == sumaMax)
            {
                if (st < posMin)
                {
                    posMin = st;
                    lungMin = lung;
                }
                else if (st == posMin)
                {
                    if (lung < lungMin)
                        lungMin = lung;
                }
            }
        }

    fout<<sumaMax<<" "<<posMin<<" "<<lungMin;
    return 0;
}