Cod sursa(job #1723823)

Utilizator antanaAntonia Boca antana Data 1 iulie 2016 16:34:06
Problema Buline Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#define MAXN 200000
using namespace std;
int v[2*MAXN+1];
int main()
{
    freopen("buline.in", "r", stdin);
    freopen("buline.out", "w", stdout);
    int n, pos, posmax, lung, t, secv;
    long long maxs, s;
    scanf("%d", &n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d%d", &v[i], &t);
        if(!t) v[i]*=-1;
        v[i+n]=v[i];
    }
    s=v[1];
    secv=1;
    maxs=s;
    pos=posmax=lung=1;
    for(int i=2;i<2*n;++i)
    {
        if(secv==n)
        {
            s-=v[i-secv];
            secv--;
            while(v[i-secv] < 0 && secv!=0)
            {
                s-=v[i-secv];
                secv--;
            }
            pos=i-secv+1;
        }
        if(s+v[i] > v[i])
        {
            s+=v[i];
            secv++;
        }
        else
        {
            secv=1;
            pos=i;
            s=v[i];
        }
        if(pos <= n)
        {
            if(s > maxs)
            {
                maxs=s;
                posmax=pos;
                lung=secv;
            }
        }
    }
    printf("%lld %d %d",maxs, posmax, lung);
    return 0;
}