Cod sursa(job #3276402)

Utilizator SwanOCPica Razvan Mihai SwanOC Data 13 februarie 2025 16:23:18
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, semn, v[200010], sum_max = INT_MIN, sum_min = INT_MAX, sum_total;
int st_min = 1, dr_min = 1, st_max = 1, dr_max = 1;

int main(void) {
    in >> n;
    for (int i = 1; i <= n; i++) {
        in >> v[i] >> semn;
        if (!semn)
            v[i] *= -1;

        sum_total += v[i];
    }

    //suma maxima necircular
    int sum = v[1], idx = 1;
    for (int i = 2; i <= n; i++) {
        if (sum + v[i] >= v[i])
            sum += v[i];
        else {
            sum = v[i];
            idx = i;
        }

        if (sum > sum_max) {
            sum_max = sum;
            st_max = idx;
            dr_max = i;
        }
    }
    
    //suma minima circular
    sum = v[1];
    idx = 1;
    for (int i = 2; i <= n; i++) {
        if (sum + v[i] <= v[i])
            sum += v[i];
        else {
            sum = v[i];
            idx = i;
        }

        if (sum < sum_min) {
            sum_min = sum;
            st_min = idx;
            dr_min = i;
        }
    }

    if (sum_max > sum_total - sum_min)
        out << sum_max << " " << st_max << " " << dr_max - st_max + 1;
    else
        out << sum_total - sum_min << " " << dr_min + 1 << " " << n + st_min - dr_min - 1;

    return 0;
}