HDU 1506 Largest Rectangle in a Histogram
#include <iostream>
#include<stack>
#include<cstdio>
#include<stack>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=100000+100;
stack<int>s;
ll h[N];
int R[N],L[N];
int main(){
int n;
while(~scanf("%d",&n)&&n){
for(int i=0;i<n;i++)scanf("%I64d",&h[i]);
while(s.size())s.pop();
for(int i=0;i<n;i++){
while(s.size()&&h[s.top()]>=h[i])s.pop();
if(s.empty()) L[i] = 0;
else L[i] = s.top()+1;
s.push(i);
}
while(s.size())s.pop();
for(int i=n-1;i>=0;i--){
while(s.size()&&h[s.top()]>=h[i])s.pop();
if(s.empty()) R[i] = n;
else R[i] = s.top();
s.push(i);
}
ll ans = 0;
for(int i=0;i<n;i++){
ans = max(ans,h[i]*(R[i]-L[i]));
}
printf("%I64d\n",ans);
}
return 0;
}