Cod sursa(job #2131134)

Utilizator luizabriciuBriciu Luiza luizabriciu Data 14 februarie 2018 13:20:28
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;

int v[200000];

int main()
{
    int n,i,a,b,li=1,lf=1,pozint=1,sumint=0,sumopt=INT_MIN,suma=0,sum=0,smopt=INT_MIN,l,fi;
    ifstream f("buline.in");
    ofstream g("buline.out");
    f>>n;
    for(i=1;i<=n;i++)
    {
      f>>a>>b;
      if(b==0)
        v[i]=-a;
      else
        v[i]=a;
        suma+=v[i];
    }
   /* cout<<suma<<" ";
    cout<<endl;
    for(i=1;i<=n;i++)
      cout<<v[i]<<" ";*/
    for(i=1;i<=n;i++)
    {
      if(sumint<0)
        sumint=v[i],pozint=i;
      else
      {
        sumint+=v[i];
      }
      if(sumint>sumopt)
      {
        sumopt=sumint;
        li=pozint;
        lf=i;
      }
    }
    for(i=1;i<=n;i++)
      v[i]*=-1;
    /*cout<<endl;
    for(i=1;i<=n;i++)
      cout<<v[i]<<" ";*/
    for(i=1;i<=n;i++)
    {
      if(sum<0)
        sum=v[i],pozint=i;
      else
      {
        sum+=v[i];
      }
      if(sum>smopt)
      {
        smopt=sum;
        l=pozint;
        fi=i;
      }
    }
    /*cout<<endl;
    cout<<smopt<<endl;*/

   /// smopt*=-1;
    suma+=smopt;
    if(sumopt<suma)
    {
      sumopt=suma;
      li=fi+1;
      lf=l-1;
    }
    if(li<lf)
    {
      lf=lf-li+1;
    }
    else
    {
      lf=n-li+lf+1;
    }
    g<<sumopt<<" "<<li<<" "<<lf;
    f.close();
    g.close();
    return 0;
}