Cod sursa(job #3334642)

Utilizator Err0rSome Error Err0r Data 18 ianuarie 2026 19:45:31
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <fstream>
#include <climits>
#include <algorithm>
#include <cstring>
using namespace std;

ifstream cin("buline.in");
ofstream cout("buline.out");

int main()
{
   ////declarare
   long n, s, i, v[200000],start,sumatotala=0,semn,aux; //generale (end=i)
   long smax,maxstart,maxend;//suma maxima
   long smin,minstart,minend,minlenght;//suma minima
   
   //citire
   cin >> n;
   for (i = 1; i <= n; i++)
   {
      cin >> v[i];
      cin >> semn;
      if (semn==0){
         v[i]=-v[i];
      }
      sumatotala=sumatotala+v[i];
      
   }

   ///////initializare
   s = v[1];
   smax = INT_MIN;
   maxstart = 1;
   maxend=1;
   smin=INT_MAX;
   minstart=1;
   minend=1;

   /////gasim suma maxima
   for (i = 2; i <= n; i++)
   {
      if (s >= 0)
      {
         s = s + v[i];
      }
      else
      {
         s = v[i];
         start = i;
      }
    
     if (s > smax)
      {
         smax = s;
         maxend = i;
         maxstart = start;
      }
      if ((s == smax) && (start <= maxstart) && (i - start < maxend - maxstart))
      {
         smax = s;
         maxend = i;
         maxstart = start;
      }}

      //gasim suma min
       for (i = 2; i <= n; i++)
   {
      if (s <= 0)
      {
         s = s + v[i];
      }
      else
      {
         s = v[i];
         start = i;
      }
     
     if (s < smin)
      {
         smin = s;
         minend = i;
         minstart = start;
      }
      if ((s == smin) && (start >= minstart) && (i - start > minend - minstart))
      {
         smin = s;
         minend = i;
         minstart = start;
      }
      
   }
   

minlenght=minend-minstart+1;
aux=minstart;
minstart=minend+1;
minend=aux-1;

   
   ////// compararea si afisarea
   if (sumatotala-smin>smax){
      cout << sumatotala-smin<<" "<<minstart<<" "<<n-minlenght;
   }
   if (sumatotala-smin<smax){
      cout << smax<<" "<<maxstart<<" "<<maxend-maxstart+1;
   }
   if (sumatotala-smin==smax){
      if (minstart<maxstart){
          cout << sumatotala-smin<<" "<<minstart<<" "<<n-minlenght;
      }
      if (minstart>maxstart){
          cout << smax<<" "<<maxstart<<" "<<maxend-maxstart+1;
      }
      if (minstart==maxstart){
          if (maxend - maxstart < n-minlenght){
          cout << smax<<" "<<maxstart<<" "<<maxend-maxstart+1;
      }
      else   cout << sumatotala-smin<<" "<<minstart<<" "<<n-minlenght;
      }
   }

}