Cod sursa(job #3277331)

Utilizator jumaracosminJumara Cosmin-Mihai jumaracosmin Data 15 februarie 2025 19:56:32
Problema Buline Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

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

const int SIZE = 2e5 + 5;

int n;
bool restarted = false;
int s, smax, lgmax, lg, start, start_max;
int a[2 * SIZE];


int64_t max(std::vector<int64_t> v){ return *std::max_element(v.begin(), v.end()); }

int64_t min(std::vector<int64_t> v){ return *std::min_element(v.begin(), v.end()); }

int main() 
{
    fin >> n;
    for(int i = 1; i <= n; ++i)
    {
        int x, y;
        fin >> x >> y;
        a[i] = x * (y ? 1 : -1);
    }
    
    smax = s = a[1];
    lgmax = lg = 1;
    start_max = start = 1;

    for(int i = 1; i <= n; ++i)
        a[n + i] = a[i];

    for(int i = 2; i <= 2 * n; ++i)
    {
        if(lg > n)
            s = a[i], lg = 1, start = i;
        else if(s + a[i] >= a[i])
            s += a[i], lg++;
        else
            s = a[i], lg = 1, start = i;
        
        if(start > n)
            start -= n;
        
        if(s > smax || (s == smax && (start_max > start || (start_max == start && lg < lgmax))))
            smax = s, lgmax = lg, start_max = start;
        
        
    }

    fout << smax << " " << start_max << " " << lgmax;

    return 0;
}