Cod sursa(job #1054045)

Utilizator harababurelPuscas Sergiu harababurel Data 13 decembrie 2013 11:49:26
Problema SequenceQuery Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;

int H[4*nmax], L[4*nmax], R[4*nmax];

void build(int node, int lo, int hi) {
	if(lo == hi) {
		H[node] = L[node] = R[node] = v[i];
		return;
	}

	int mid = (lo + hi) >> 1;

	build(2*node, lo, mid);
	build(2*node+1, mid+1, hi);
	
	int a = max(H[2*node], H[2*node+1]);
	int b = max(R[2*node], L[2*node+1]);
	H[node] = max(a, b);
	H[node] = max(H[node], R[2*node] + L[2*node+1]);

	L[node] = L[2*node];
	if(L[2*node] == suma pe intervalul stang) L[node] = max(L[node], L[2*node]+L[2*node+1]);

	R[node] = R[2*node+1];
	if(R[2*node+1] == suma pe intervalul drept) R[node] = max(R[node], R[2*node]+R[2*node+1]);

}	

int main() {
	ifstream f("sequencequery.in");
	ofstream g("sequencequery.out");

	f>>n;
	for(int i=1; i<=n; i++) f>>v[i];

	build(1, 1, n);

	return 0;
}