Cod sursa(job #677197)

Utilizator nautilusCohal Alexandru nautilus Data 9 februarie 2012 22:01:57
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
using namespace std;
#define NMAX 6000010

int n;
int a[NMAX];
int ssm,pozissm,pozfssm;

void read()
{
 int i;
 ifstream fin("ssm.in");
 fin>>n;
 for (i=1; i<=n; ++i)
	 fin>>a[i];
 fin.close();
}

void solve()
{
 int i,best,pozibest,pozfbest;
 best = ssm = a[1]; 
 pozibest = pozfbest = pozissm = pozfssm = 1;
 for (i=2; i<=n; ++i)
	{
	 if (best + a[i] >= a[i])
		{
		 best += a[i];
		 pozfbest++;
		}else
		{
		 best = a[i];
		 pozibest = i;
		 pozfbest = i;
		}
	 if (best > ssm)
		{
		 ssm = best;
		 pozissm = pozibest;
		 pozfssm = pozfbest;
		}
	}
}

void write()
{
 ofstream fout("ssm.out");
 fout<<ssm<<" "<<pozissm<<" "<<pozfssm<<'\n';
 fout.close();
}

int main()
{
 read();
 solve();
 write();
 return 0;
}