Cod sursa(job #3325905)

Utilizator unomMirel Costel unom Data 26 noiembrie 2025 19:59:30
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>

using namespace std;

#define int long long

ifstream cin("buline.in");
ofstream cout("buline.out");
int n;
int v[200005];
int sp[200005];

signed main()
{
    cin>>n;

    int x, y;
    for(int i = 1; i<=n; i++)
    {
        cin>>x>>y;

        if(y == 0)
        {
            v[i] = -x;
        }
        else
        {
            v[i] = x;
        }

        sp[i] = sp[i - 1] + v[i];
    }

    int best = 0;

    int smax = v[1];
    int stmax, drmax;

    for(int i = 1; i<=n; i++)
    {
        int sum = sp[i] - sp[best];

        if(sum > smax)
        {
            smax = sum;
            stmax = best + 1;
            drmax = i;
        }

        if(sp[i] <= sp[best])
        {
            best = i;
        }
    }

    best = 0;
    int smin = v[1];
    int stmin, drmin;

    for(int i = 1; i<=n; i++)
    {
        int sum = sp[i] - sp[best];

        if(sum < smin)
        {
            smin = sum;
            stmin = best + 1;
            drmin = i;
        }

        if(sp[i] > sp[best])
        {
            best = i;
        }
    }

    int total = 0;
    for(int i = 1; i<=n; i++)
    {
        total += v[i];
    }

    if(smax > total - smin) //subsecventa de suma maxima e optima
    {
        int len = drmax - stmax + 1;

        cout<<smax<<" "<<stmax<<" "<<len;
    }
    else //prefer sa iau tot vectorul - subsecventa de suma minima
    {
        int len = drmin - stmin + 1;

        cout<<total - smin<<" "<<drmin + 1<<" "<<n - len;
    }

    return 0;
}