Cod sursa(job #3192095)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 11 ianuarie 2024 15:15:10
Problema Buline Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
struct answer {
    long long value = LLONG_MIN;
    int pivot = 0;
    int length = 0;
} ans;


int main() {
    int n;
    fin >> n;
    vector<int> v(n+1);
    for (int i = 1; i <= n; i++) {
        int type;
        fin >> v[i];
        fin >> type;
        if (!type) {
            v[i]*=-1;
        }
    }
    int pivot = 1;
    int length = 1;
    int s = v[1];
    for (int i = 2; i <= n; i++) {
        if (v[i] + s >= v[i]) {
            length++;
            s+=v[i];
            if (s > ans.value) {
                ans = {s,pivot,length};
            } else if(s == ans.value) {
                if(pivot < ans.pivot) {
                    ans = {s,pivot,length};
                } else if (pivot == ans.pivot
                        && length < ans.length) {
                    ans = {s,pivot,length};
                }
            }
        } else {
            length = 1;
            pivot = i;
            s = v[i];
            if (s > ans.value) {
                ans = {s,pivot,length};
            } else if(s == ans.value) {
                if(pivot < ans.pivot) {
                    ans = {s,pivot,length};
                } else if (pivot == ans.pivot
                           && length < ans.length) {
                    ans = {s,pivot,length};
                }
            }
        }
    }
    for (int i = 1; i < pivot; i++) {
        if (v[i] + s > v[i]) {
            length++;
            s+=v[i];
            if (s > ans.value) {
                ans = {s,pivot,length};
            } else if(s == ans.value) {
                if(pivot < ans.pivot) {
                    ans = {s,pivot,length};
                } else if (pivot == ans.pivot
                           && length < ans.length) {
                    ans = {s,pivot,length};
                }
            }
        } else {
            break;
        }
    }
    fout << ans.value << ' ' << ans.pivot << ' ' << ans.length;
    return 0;
}