Cod sursa(job #382765)

Utilizator shnakoVlad Schnakovszki shnako Data 14 ianuarie 2010 18:06:18
Problema Secventa 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <string.h>
#define MARE -2000000001
FILE *f=fopen("secv2.in", "r"), *g=fopen("secv2.out", "w");
long v[50005], s[50005], poz[50005], k, n, i, j, h, pozmax, lmax, sw, t, l, max;


void citeste(void)
{
	fscanf(f, "%ld%ld", &n, &k);
	for (i=1;i<=n;i++)
		fscanf(f, "%ld", &v[i]);
	fclose(f);
}

void rezolva(void)
{
	memset(s, MARE, sizeof(s));
	max = MARE;
	s[1]=v[1];
	poz[1]=1;
	for (i=2;i<=n;i++)
		if (s[i-1]<=0)
		{
			s[i]=v[i];
			poz[i]=1;
			if (s[i]>=max && poz[i]>(t-l+1))
			{
				max = s[i];
				t = i;
				l = i - poz[i]+1;
			}
		}
		else
		{
			s[i]=s[i-1]+v[i];
			poz[i]=poz[i-1]+1;
			if (s[i]>max && poz[i]>(t-l+1))
			{
				max = s[i];
				t = i;
				l = i - poz[i]+1;
			}
		}
}

void tip(void)
{
	if (!sw)
		fprintf(g, "%ld %ld %ld", l, t, max);
	else
		fprintf(g, "%ld %ld %ld", l, t, -max);		
	fclose(g);
}


int main(void)
{
	citeste();
	rezolva();
	sw=0;
	if (max==MARE)
	{
		for (i=1;i<=n;i++)
			v[i]=-v[i];
		sw=1;
		rezolva();
	}
	tip();
	return 0;
}