Cod sursa(job #2571720)

Utilizator deiubejanAndrei Bejan deiubejan Data 5 martie 2020 09:45:37
Problema Buline Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <bits/stdc++.h>
using namespace std;

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

#define cin fin
#define cout fout
#define sp " "
#define en "\n"
#define x first
#define y second

const int NMAX = 2e5+10;
int n, x, s, k, start;
int v[NMAX];
int sumPart[NMAX];
pair<int, int> sumMax[NMAX];

int bestS, bestK, bestStart;

void read()
{
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i]>>x;
        if(x == 0)
            v[i]*=-1;
    }
}


void solve()
{
    for(int i=1; i<=n; i++)
    {
        sumPart[i]=sumPart[i-1];
        sumPart[i]+=v[i];
        sumMax[i]=sumMax[i-1];
        if(sumMax[i].x < sumPart[i])
            sumMax[i] = {sumPart[i], i};
    }

    int bestS=-1e7;
    for(int i=1; i<=n; i++)
    {
        s=sumPart[n]-sumPart[i-1];
        s+=sumMax[i-1].x;
        cout<<s<<en;
        if(bestS < s)
        {
            bestS = s;
            bestK = n-i+1 + sumMax[i-1].y;
            bestStart = i;
        }
    }
    int s=-1e7;
    for(int i=1; i<=n; i++)
    {
        if(s<0)
        {
            s=v[i];
            start=i;
            k=1;
        }
        else
        {
            s+=v[i];
            k++;
        }
        if(s>bestS)
        {
            bestS=s;
            bestK=k;
            bestStart=start;
        }
    }
    cout<<bestS<<sp<<bestStart<<sp<<bestK;
}



int main()
{
    read();
    solve();

    return 0;
}