Cod sursa(job #3347630)

Utilizator AndreiEnacheTheGoatAndrei Iancu Enache AndreiEnacheTheGoat Data 17 martie 2026 17:05:32
Problema Buline Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

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

const int NMAX = 200000;

struct BILE
{
    int bile, culoare;
};

BILE v[NMAX + 5];
bool f[NMAX + 5];

int main()
{
    int bilete, sum, sumax, bil, i, ince, p, l, u;
    fin >> bilete;
    sum = sumax = 0;
    bool cul;
    for(i = 1; i <= bilete; i ++)
    {
        fin >> bil >> cul;
        v[i].bile = bil;
        v[i].culoare = cul;
    }
    i = 1;
    while(v[i].culoare == 0)
        i ++;
    p = i;
    l = 0;
    for(; i <= bilete; i ++)
    {
        if(v[i].culoare == 1)
        {
            sum += v[i].bile;
            f[i] = 1;
            l ++;
        }
        else
        {
            sum -= v[i].bile;
            f[i] = 1;
            l ++;
            if(sum < 0)
            {
                sum = 0;
                memset(f, 0, sizeof(f));
                p = i + 1;
                l = 0;
            }
        }
        if(sum > sumax)
            sumax = sum;
    }
    u = sumax;
    for(i = 1; i <= bilete; i ++)
    {
        if(f[i] == 1)
            break;
        if(v[i].culoare == 1)
            sum += v[i].bile;
        else
        {
            sum -= v[i].bile;
            if(sum < 0)
                break;
        }
        if(sum > sumax)
            sumax = sum;
    }
    for(i = 1; i <= bilete; i ++)
    {
        if(v[i].culoare == 1)
            u += v[i].bile;
        else
            u -= v[i].bile;
        l ++;
        if(u == sumax)
            break;
    }
    fout << sumax << " " << p << " " << l << "\n";
    return 0;
}