Cod sursa(job #1409351)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 30 martie 2015 14:49:03
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <cstdio>
using namespace std;
int v[400005];
int main()
{
    freopen("buline.in", "r", stdin);
    freopen("buline.out", "w", stdout);
    int n, nr, c, s, st, l, smax, stmax, drmax, sum, smin, stmin, drmin, sans, stans, lans;
    scanf("%d",&n);
    sum = 0;
    for (register int i = 0; i < n; ++i)
    {
        scanf("%d%d", &nr, &c);
        if (c == 1)
            v[i] = nr;
        else
            v[i] = -nr;
        sum += v[i];
    }
    smax = s = v[0];
    stmax = drmax = st = 0;
    for (register int i = 1; i < n; ++i)
    {
       if (s < 0)
       {
           s = v[i];
           st = i;
       }
       else
            s += v[i];

       if (s > smax)
       {
           smax = s;
           stmax = st;
           drmax = i;
       }
    }
    smin = s = v[0];
    stmin = drmin = st = 0;
    for (register int i = 1; i < n; ++i)
    {
        if (s > 0)
        {
            s = v[i];
            st = i;
        }
        else
            s += v[i];

        if (s < smin)
        {
            smin = s;
            stmin = st;
            drmin = i;
        }
    }
    if (smax > sum - smin)
    {
        sans = smax;
        stans = stmax;
        lans = drmax - stmax + 1;
    }
    else
    {
        sans = sum - smin;
        stans = (drmin + 1 ) % n;
        lans = n - (drmin - stmin + 1);
    }
    printf ("%d %d %d\n", sans, stans + 1, lans);
    return 0;
}