Cod sursa(job #3167256)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 10 noiembrie 2023 15:03:03
Problema Buline Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
struct buline{
    int value;
    friend istream& operator>>(istream& os, buline &var){
        short type;
        os>>var.value>>type;
        if(!type)
            var.value *= -1;
        return os;
    }
};
struct answer{
    int value;
    int start;
    int length;
    friend ostream& operator<<(ostream& os, answer ans){
        os<<ans.value<<' '<<ans.start<<' '<<ans.length;
    }
} ans;
int n;
vector<int> v;
vector<int> sir;


int main()
{
    fin>>n;
    buline aux;
    fin>>aux;
    ans = {aux.value, 1, 1};
    sir.push_back(aux.value);
    v.push_back(aux.value);
    for(int i = 2; i <= n; i++){
        fin>>aux;
        sir.push_back(aux.value);
    }
    int left;
    for(int i = 2; i <= n; i++){
        if(v.back() + sir[i - 1] > sir[i - 1])
            v.push_back(v.back() + sir[i - 1]);
        else
            left=i,v.push_back(sir[i -1 ]);
        if(v.back() > ans.value)
            ans = {v.back(), left, i - left + 1};
    }
    if(v.back() + sir.front() > sir.front()){
        int index = 1;
        v.front() = v.back() + sir.front();
        ans.length++;
        int mem_length = ans.length;
        for(int i = 1; i < left - 1; i++){
            if(v[i - 1] + sir[i] > sir[i])
                v[i] = v[i - 1] + sir[i];
            else
                v[i] = sir[i];
            if(ans.value < v[i])
                ans.value = v[i], ans.length = ans.length + i;
        }
    }

    fout<<ans;
    return 0;
}