Cod sursa(job #382909)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 14 ianuarie 2010 23:30:56
Problema Secventa 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <cstdio>
#include <vector>
#define NMAX 50010
#define pb push_back
using namespace std;

/*class nuss
{
	public: 
		int val, l, r, t;
};*/

//nuss ob;
//vector<nuss> sol;
int N, K, v[NMAX], i, sw, e, s, sum, poz;
int smax, lmax, val, nr, l, r;

void read(void)
{
	freopen("secv2.in", "r", stdin);
	scanf("%d %d", &N, &K);
	
	for(i = 1; i <= N; ++i)
		scanf("%d", &v[i]);
	
		
	
	fclose(stdin);
}
/*
inline void add(int z, int x, int c, int v)
{
	ob.val = z;
	ob.l = x;
	ob.r = c;
	ob.t = v;
	sol.pb(ob);
}
void calc(void)
{
	int s = e = 1;
	add(v[1], 1, 1, 1);
	sum = v[1];
	
	for(i = 2; i <= N; ++i)
	{
		if((sum + v[i]) > 0)
		{
			sum += v[i];
			e = e + 1;
			add(sum, s, e, e - s + 1);
		}
		else
		{
			sum = v[i];
			s = e = i;
			add(v[i], i, i, 1);
		}
	}
	smax = INT_MIN;
	lmax = 0;
	for(i = 0; i < N; ++i)
		if((sol[i].val >= smax) && (sol[i].t > lmax))
			smax = sol[i].val, lmax = sol[i].t, poz = i;


}*/

void calc2(void)
{
	int s = 0, m = INT_MIN;
	
	for(i = 1; i <= N; ++i)
	{
		s += v[i];
		if(s > m)
		{
			m = s;
			r = i;
		}
	}
	
	s = 0;
	m = INT_MIN;
	for(i = r; i >= 1; --i)
	{
		s += v[i];
		if(s > m)
		{
			m = s;
			l = i;
		}
	}
	for(i = l; i <= r; ++i)
		smax += v[i];
}
void solve(void)
{
	if(K != N)
		calc2();
	else
	{
		for(i = 1; i <= N; ++i)
			smax += v[i];
		l = 1;
		r = N;
	}
}
void print(void)
{
	freopen("secv2.out", "w", stdout);
	printf("%d %d %d", l, r, smax);
	
	fclose(stdout);
}
int main(void)
{
	read();
	solve();
	print();
	
	return 0;
}