Pagini recente » Cod sursa (job #1836579) | Cod sursa (job #905981) | Cod sursa (job #1614320) | Cod sursa (job #1310634) | Cod sursa (job #1054065)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
int H[4*nmax], L[4*nmax], R[4*nmax], s[nmax], v[nmax];
int n, m, a, b;
int sum(int lo, int hi) { return (s[hi] - s[lo-1]); }
void build(int node, int lo, int hi) {
if(lo == hi) {
H[node] = L[node] = R[node] = v[lo];
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];
L[node] = max(L[node], sum(lo, mid)+L[2*node+1]);
R[node] = R[2*node+1];
R[node] = max(R[node], R[2*node]+sum(mid+1, hi));
}
int main() {
ifstream f("sequencequery.in");
ofstream g("sequencequery.out");
f>>n>>m;
for(int i=1; i<=n; i++) {
f>>v[i];
s[i] = s[i-1] + v[i];
}
build(1, 1, n);
for(int i=1; i<=m; i++) {
f>>a>>b;
//query(a, b);
}
//for(int i=1; i<=15; i++) cout<<"node = "<<i<<" - H="<<H[i]<<" L="<<L[i]<<" R="<<R[i]<<"\n";
return 0;
}