Cod sursa(job #3304794)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 27 iulie 2025 13:27:20
Problema Buline Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int n, v[400010];

int main()
{
    fin >> n;
    for(int i=1; i<=n; i++) {
        int x, color; fin >> x >> color;
        if(color == 0) v[i] = v[i + n] = -x;
        else v[i] = v[i + n] = x;
    }
    int sumMax = v[1], poz = 1, lung = 1;
    int sumCurent = v[1], st = 1;
    for(int i=2; i<=2*n; i++) {
        if(sumCurent + v[i] > v[i]) sumCurent += v[i];
        else sumCurent = v[i], st = i;
        if(sumCurent > sumMax) sumMax = sumCurent, poz = st, lung = i - st + 1;
        else if(sumCurent == sumMax) {
            if(st < poz) poz = st, lung = i - st + 1;
            else if(st == poz && i - st + 1 < lung) lung = i - st + 1;
        }
        if(st > n) break;
        if(i - st + 1 == n) {
            int dr = i;
            while(v[st] < 0 && st <= dr) sumCurent -= v[st++];
            while(v[dr] < 0 && st <= dr) sumCurent -= v[dr--];
            if(sumCurent > sumMax) sumMax = sumCurent, poz = st, lung = dr - st + 1;
            else if(sumCurent == sumMax) {
                if(st < poz) poz = st, lung = dr - st + 1;
                else if(st == poz && dr - st + 1 < lung) lung = dr - st + 1;
            }
            break;
        }
    }
    fout << sumMax << " " << poz << " " << lung;

    return 0;
}