Cod sursa(job #1712243)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 2 iunie 2016 14:42:30
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>

int max(int a, int b){
    return a > b ? a : b;
}

int v[200000];
int main(){
    int n;
    FILE*fi,*fo;
    fi=fopen("buline.in","r");
    fo=fopen("buline.out","w");
    fscanf(fi,"%d", &n);
    int sum=0;
    for(int i=0;i<n;i++){
        int x, y;
        fscanf(fi,"%d%d", &x, &y);
        if(y==1)
            v[i]=x;
        else
            v[i]=-x;
        sum+=v[i];
    }
    int smax=-2000000000, sprec=-1, st, len;
    int stmax, lenmax;
    for(int i=0;i<n;i++){
        if(sprec+v[i]>v[i]){
            sprec+=v[i];
            len++;
        }
        else{
            sprec=v[i];
            st=i;
            len=1;
        }
        if(sprec>smax){
            smax=sprec;
            stmax=st+1;
            lenmax=len;
        }
        v[i]=-v[i];
    }
    int smax2=-2000000000, stmax2, lenmax2;
    sprec=0;
    for(int i=0;i<n;i++){
        if(sprec+v[i]>v[i]){
            sprec+=v[i];
            len++;
        }
        else{
            sprec=v[i];
            st=i;
            len=1;
        }
        if(sprec>smax2){
            smax2=sprec;
            stmax2=st+1;
            lenmax2=len;
        }
    }
    if(smax>sum+smax2)
        fprintf(fo,"%d %d %d", smax, stmax, lenmax);
    else
        fprintf(fo,"%d %d %d", sum+smax2, stmax2+lenmax2, n-lenmax2);
    fclose(fi);
    fclose(fo);
    return 0;
}