Cod sursa(job #2473985)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 14 octombrie 2019 16:24:18
Problema Buline Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int v[400005];
int n,a,b,startmax,lgmax,startmin,lgmin,start1,start2,lg1,lg2;
long long smax,smin,sum,smaxx,sminn;
bool ok;
int main()
{
    fin >> n;
    smin = 10000000;
    for (int i=1;i<=n;i++)
    {
        fin >> a >> b;
        if (b == 0)
            v[i] = -a;
        else v[i] = a;
        sum += v[i];
    }
    start1 = start2 = 1;
    for (int i=1;i<=n;i++)
    {
        smax += v[i];
        smin += v[i];
        lg1 ++;
        lg2 ++;
        if (smax < 0) {smax = 0;lg1=0;
        if (i == n) start1 = 0;
        else start1=i+1;
        }
        if (smin > 0) {smin = 0;lg2=0;
        if (i == n) start2 = 0;
        else start2=i+1;
        }
        if (smax > smaxx) {
            smaxx = smax;
            startmax = start1;
            lgmax = lg1;
        }
        if (smin < sminn)
        {
            sminn = smin;
            startmin = start2;
            lgmin = lg2;
        }
    }
    sminn = sum - sminn;
    if (sminn > smaxx) ok = 1;
    else ok = 0;
    if (ok)
    {
        fout << sminn << " " << startmin+1 << " " << n-lgmin << '\n';
    }
    else{
        if (startmin+1 == startmax) fout << smaxx << " " << startmax << " " << max(n-lgmin,lgmax);
        else fout << smaxx << " " << startmax << " " << lgmax << '\n';
    }
    return 0;
}