Cod sursa(job #269801)

Utilizator Addy.Adrian Draghici Addy. Data 3 martie 2009 13:53:41
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#define DIM 200001

int v[2*DIM],S[2*DIM];
long n,i,max,min,pmax,pmin,Lmax,Lmin,L,p,s,t;

int main(){

  FILE *f = fopen("buline.in", "r");
  FILE *g = fopen("buline.out", "w");

  fscanf(f,"%ld",&n);

  for (i=1; i<=n; i++) {
    fscanf(f,"%d%ld",&v[i],&t);
    if (!t)
      v[i] *= -1;
    s += v[i];
  }

  S[1] = v[1];
  max = v[1];
  L = 0; p = 1;

  for (i=2; i<=n; i++) {
    if (S[i-1] + v[i] >= v[i]) {
      S[i] = S[i-1] + v[i];
      L++;
    }
    else {
      S[i] = v[i];
      p = i;
      L = 1;
    }
    if (S[i] > max) {
      max = S[i];
      pmax = p;
      Lmax = L;
    }
  }

  S[1] = v[1];
  min = v[1];
  L = 0; p = 1;

  for (i=2; i<=n; i++) {
    if (S[i-1] + v[i] <= v[i]) {
      S[i] = S[i-1] + v[i];
      L++;
    }
    else {
      S[i] = v[i];
      p = i;
      L = 1;
    }
    if (S[i] < min) {
      min = S[i];
      pmin = p;
      Lmin = L;
    }
  }

  if (max >= s - min)
    fprintf(g,"%ld %ld %ld\n",max,pmax,Lmax);
  else
    fprintf(g,"%ld %ld %ld\n",s-min,pmin+Lmin != n ? (pmin+Lmin)%n : n,n-Lmin);



  fclose(f);
  fclose(g);

  return 0;
}