Cod sursa(job #2136345)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 19 februarie 2018 20:48:08
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <stdio.h>

using namespace std;
FILE *f,*g;
int n,m,sum;
int v[400002];
void citire()
{   int i,x,y;
    fscanf(f,"%d",&n);
    m=n;
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d %d",&x,&y);
        if(y==0)
            x*=-1;
        v[i]=x;
        sum+=x;
    }

}
int ssm(int &li, int &lf)
{
    int sum_int=0, suma_optima=-9999999, i,poz_int;
   for(i=1;i<=n;i++)
   {
       if(sum_int<0)
        {
            sum_int=v[i];
            poz_int=i;
        }
       else
        sum_int+=v[i];
       if(sum_int>suma_optima)
       {
           suma_optima=sum_int;
           li=poz_int;
           lf=i;
       }
   }
   return suma_optima;
}
void schimbare_semn()
{
    for(int i=0;i<=n;i++)
        v[i]*=-1;
}
int main()
{
    int li=0,lf=0,suma1,suma2,li1,lf1;
    f=fopen("buline.in","r");
    g=fopen("buline.out","w");
    citire();
    suma1=ssm(li,lf);
    li1=li;
    lf1=lf;
    li=lf=0;
    schimbare_semn();
    suma2=ssm(li,lf);
    sum+=suma2;
    if(suma1<sum)
    {
        suma1=sum;
        li1=lf+1;
        lf1=li-1;
    }
    if(li1<lf1)
        lf1=lf1-li1+1;
    else
        lf1=n-li1+lf1+1;
    fprintf(g,"%d %d %d",suma1,li1,lf1);
    fclose(f);
    fclose(g);
    return 0;
}