On this page
article
Area Maxima de Histograma
Sobre
Assume que todas as barras tem largura 1,
e altura dada no vetor v
O(n)
Link original: areaHistograma.cpp
Código
ll area(vector<int> v) {
ll ret = 0;
stack<int> s;
// valores iniciais pra dar tudo certo
v.insert(v.begin(), -1);
v.insert(v.end(), -1);
s.push(0);
for(int i = 0; i < (int) v.size(); i++) {
while (v[s.top()] > v[i]) {
ll h = v[s.top()]; s.pop();
ret = max(ret, h * (i - s.top() - 1));
}
s.push(i);
}
return ret;
}