Cod sursa(job #1412213)

Utilizator bogdi1bogdan bancuta bogdi1 Data 1 aprilie 2015 10:30:45
Problema Buline Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

using namespace std;
int v[200001];
int main()
{	freopen("buline.in", "r",stdin);
	freopen("buline.out", "w",stdout);
	int n,i,tip,sc,smax,st,stm,drm,stmm,drmm,smin,smax2,stot=0;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d%d", &v[i], &tip);
		if(tip==0)
			v[i]=v[i]*-1;
    stot=stot+v[i];
	}
	sc=smax=v[0];
	st=stm=drm=0;
  for(i=1; i<n; i++){
    if(sc+v[i]>v[i])
      sc=sc+v[i];
    else{
      sc=v[i];
      st=i;
    }
    if(sc>smax){
      stm=st;
      drm=i;
      smax=sc;
    }
  }
  drmm=drm;
  stmm=stm;
  smin=stot;
  sc=v[0];
  st=stm=drm=0;
  for(i=1; i<n; i++){
    if(sc+v[i]<v[i])
      sc=sc+v[i];
    else{
      sc=v[i];
      st=i;
    }
    if(sc<smin){
      stm=st;
      drm=i;
      smin=sc;
    }
  }
  smax2=stot-smin;
  if(smax>smax2)
    printf("%d %d %d", smax, stmm, drmm-stmm+1);
  else{
    if(stm-1==-1)
      stm=n-1;
    printf("%d %d %d", smax2, (drm+1)%n+1, n-(drm-stm+1));
  }
  return 0;
}