Cod sursa(job #2331234)

Utilizator mirceatlxhaha haha mirceatlx Data 29 ianuarie 2019 13:14:13
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
struct bil
{
  int color,number;
} v[200005];
int main()
{
  int n,i;
  fin>>n;
  int allsum=0;
  for(i=1;i<=n;i++)
  {
    fin>>v[i].number;
    fin>>v[i].color;
    if(v[i].color==0)
      v[i].number=v[i].number*(-1);
    allsum=allsum+v[i].number;
  }
  //subsecventa de suma maxima 1-n
  int st,dr,currenti;
  st=dr=currenti=1;
  int maxsum,currentsum;
  maxsum=currentsum=v[1].number;
  for(i=2;i<=n;i++)
  {
    if(v[i].number+currentsum<v[i].number)
    {
      currenti=i;
      currentsum=v[i].number;
    }
    else
    {
      currentsum=currentsum+v[i].number;
    }
    if(currentsum>maxsum)
    {
      st=currenti;
      maxsum=currentsum;
      dr=i;
    }
  }
  // secventa de suma minima 1-n
  int left,right,curri;
  left=right=curri=1;
  int minsum;
  minsum=currentsum=v[1].number;
  for(i=2;i<=n;i++)
  {
    if(v[i].number+currentsum>v[i].number)
    {
      currentsum=v[i].number;
      curri=i;
    }
    else
    {
      currentsum=currentsum+v[i].number;
    }
    if(currentsum<minsum)
    {
      minsum=currentsum;
      right=i;
      left=curri;
    }
  }
  allsum=allsum-minsum;
  int final=max(allsum,maxsum);
  if(final==allsum)
  {
    fout<<allsum<<" "<<right+1<<" ";
    int finalsum=right-left+1;
    fout<<n-finalsum;
    fout<<"\n";
  }
  if(final==maxsum)
  {
    fout<<maxsum<<" "<<st<<" "<<dr-st+1;
    fout<<"\n";
  }
  fin.close();
  fout.close();
  return 0;
}