Cod sursa(job #3304853)

Utilizator paulihno15Ciumandru Paul paulihno15 Data 28 iulie 2025 09:46:38
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <bits/stdc++.h>
#define NMAX 2000000
#define ll long long

using namespace std;

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

int n, x, tip;
ll s1, s2, sum, smax = INT_MIN, smin = INT_MAX, S;
int start_1, start_2, st_1, dr_1, st_2, dr_2, lmin = INT_MAX, lmax = INT_MIN, P, L;

int main() {
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> x >> tip;
        if (!tip) {
            x *= -1;
        }
        sum += x;

        if (s1 < 0) {
            s1 = 0;
            start_1 = i;
        }
        if (s2 > 0) {
            s2 = 0;
            start_2 = i;
        }

        s1 += x;
        s2 += x;

        if (s1 > smax) {
            smax = s1;
            st_1 = start_1;
            dr_1 = i;
            lmin = dr_1 - st_1 + 1;
        }
        else if (s1 == smax && i - start_1 + 1 < lmin) {
            st_1 = start_1;
            dr_1 = i;
            lmin = dr_1 - st_1 + 1;
        }

        if (s2 < smin) {
            smin = s2;
            st_2 = start_2;
            dr_2 = i;
            lmax = dr_2 - st_2 + 1;
        }
        else if (s2 == smin && i - start_2 + 1 > lmax) {
            st_2 = start_2;
            dr_2 = i;
            lmax = dr_2 - st_2 + 1;
        }
    }

    if (smax > sum - smin) {
        S = smax;
        P = st_1;
        L = lmin;
    }
    else if (smax < sum - smin) {
        S = sum - smin;
        if (dr_2 < n) {
            P = dr_2 + 1;
        }
        else {
            P = 1;
        }
        L = n - lmax;
    }
    else if (smax == sum - smin) {
        S = smax;
        if (dr_2 < n) {
            P = min(st_1, dr_2 + 1);
        }
        else {
            P = min(1, st_1);
        }
        L = min(lmin, n - lmax);
    }

    fout << S << ' ' << P << ' ' << L;
    return 0;
}