Cod sursa(job #2550682)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 18 februarie 2020 23:51:02
Problema Buline Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb

#include <iostream>
#include <fstream>
#define INF 999999999

using namespace std;

ifstream fin  ("buline.in");
ofstream fout ("buline.out");

long long n, v[200005], x;
long long suma, scrt, pcrt, poz;
long long maxx=-INF, smax, dmax;
long long minn= INF, smin, dmin;

void afis1(){
     fout<<maxx<<" "<<smax<<" "<<dmax-smax+1;
}

void afis2(){
     fout<<suma<<" "<<dmin+1<<" "<<n-(dmin-smin+1);
}

int main (){
     fin>>n;
     for(int i=1; i<=n; i++){
          fin>>v[i]>>x;
          if(x == 0)
               v[i]=-v[i];
          suma+=v[i];
     }

     scrt=v[1];
     pcrt=1;
     for(int i=2; i<=n; i++){
          if(scrt + v[i] >= v[i])
               scrt+=v[i];
          else{
               scrt=v[i];
               pcrt=i;
          }


          if(maxx < scrt){
               maxx=scrt;
               smax=poz;
               dmax=i;
          }
     }

     scrt=v[1];
     pcrt=1;
     for(int i=2; i<=n; i++){
          if(scrt + v[i] <= v[i])
               scrt+=v[i];
          else{
               scrt=v[i];
               poz=i;
          }

          if(scrt < minn){
               minn=scrt;
               smin=poz;
               dmin=i;
          }
     }

     suma-=minn;

     if(suma <  maxx)
          afis1();

     if(suma >  maxx)
          afis2();

     if(suma == maxx){

          if(smax < dmin+1)
               afis1();
          else
               afis2();
     }

     return 0;
}