Cod sursa(job #1772624)

Utilizator giotoPopescu Ioan gioto Data 6 octombrie 2016 21:43:15
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
using namespace std;

int n, k, a[200002];
int main()
{
    freopen("buline.in", "r", stdin);
    freopen("buline.out", "w", stdout);
    scanf("%d", &n);
    int Sol = -2000000000, Sum = 0, is = 0, ML = 0;
    for(int i = 1; i <= n; ++i){
        scanf("%d %d", &a[i], &k);
        if(k == 0) a[i] *= (-1);
        a[n + i] = a[i];
    }
    int j = 0, L = 0;
    for(int i = 1; i <= n; ++i){
        if(Sum < 0)
            {Sum = a[i]; L = 1; j = i;}
        else
            Sum += a[i] , ++L;
        if(Sum > Sol) {Sol = Sum; is = j; ML = L;}
        else if(Sum == Sol && is < j) {is = j; ML = L;}
        else if(Sum == Sol && is == j && ML > L) ML = L;
    }
    for(int i = n + 1; i <= 2 * n; ++i){
        if(i - n == j) break;
        if(Sum < 0)
            {Sum = a[i]; L = 1; j = i;}
        else
            Sum += a[i] , ++L;
        bool ok = 0;
        if(j > n) ok = 1, j -= n;
        if(Sum > Sol) {Sol = Sum; is = j; ML = L;}
        else if(Sum == Sol && is < j) {is = j; ML = L;}
        else if(Sum == Sol && is == j && ML > L) ML = L;
        if(ok == 1) j += n;
    }
    if(is > n) is -= n;
    printf("%d %d %d", Sol, is, ML);
    return 0;
}