Cod sursa(job #2693977)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 7 ianuarie 2021 19:06:29
Problema Buline Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define MAX_N 200000
int v[MAX_N], semn[2] = { -1, 1 };
int n, maxS, st, dr;
void ssm() {
    int suma, start, i;
    maxS = suma = v[0];
    st = dr = start = 0;
    for ( i = 1; i < n; i++ ) {
        if ( suma < 0 ) {
            suma = 0;
            start = i;
        }
        suma += v[i];
        if ( suma > maxS ) {
            maxS = suma;
            st = start;
            dr = i;
        }
    }
}
int main() {
    FILE *fin, *fout;
    int cul, maxSuma, start, len, s, i;
    fin = fopen( "buline.in", "r" );
    fscanf( fin, "%d", &n );
    s = 0;
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d%d", &v[i], &cul );
        v[i] = v[i] * semn[cul];
        s += v[i];
    }
    fclose( fin );
    ssm();
    for ( i = 0; i < n; i++ )
        v[i] = -v[i];
    maxSuma = maxS;
    start = st;
    len = dr - st + 1;
    ssm();
    if ( maxS + s > maxSuma ) {
        maxSuma = maxS + s;
        start = dr + 1;
        len = n - (dr - st + 1);
    }
    fout = fopen( "buline.out", "w" );
    fprintf( fout, "%d %d %d", maxSuma, start + 1, len );
    fclose( fout );
    return 0;
}