Cod sursa(job #3243358)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 17 septembrie 2024 19:17:20
Problema Buline Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")

//#define fin cin
//#define fout cout

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

int n;
vector<int> v(200001);
vector<bool> hasBeenStart(200001);

struct a {
    int value;
    int index;
    int length;
} curr, ans;

int main() {
    fin >> n;
    for (int i = 1; i <= n; i++) {
        bool type;
        fin >> v[i] >> type;
        if (!type) {
            v[i] *= -1;
        }
    }

    curr = ans = {v[1],1,1};

    hasBeenStart[1] = true;

    for (int i = 2; !hasBeenStart[curr.index] or curr.length <= n; i++, i = i > n ? 1 : i, curr.length++) {
        if (curr.value + v[i] >= v[i]) {
            curr.value += v[i];
            if (ans.value < curr.value) {
                ans = curr;
            } else if (ans.value == curr.value and (ans.length < curr.length or ans.index < curr.index)) {
                ans = curr;
            }
        } else {
            curr.value = v[i];
            curr.length = 1;
            curr.index = i;
            hasBeenStart[curr.index] = true;
            if (ans.value < curr.value) {
                ans = curr;
            } else if (ans.value == curr.value and (ans.length < curr.length or ans.index < curr.index)) {
                ans = curr;
            }
        }
    }
    fout << ans.value << ' ' << ans.index << ' ' << ans.length;
    return 0;
}