标签:dp

7 2 1 4 5 1 3 3 4 1000 1000 1000 1000 0
8 4000
#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
__int64 h[N];
int lp[N];
int rp[N];
int n;
int main()
{
while (~scanf("%d", &n), n)
{
__int64 ans = 0;
for (int i = 1; i <= n; ++i)
{
scanf("%I64d", &h[i]);
ans = max(ans, h[i]);
}
lp[1] = 1;
rp[n] = n;
for (int i = 2; i <= n; ++i)
{
int p = i;
while (p > 1 && h[i] <= h[p - 1])
{
p = lp[p - 1];
}
lp[i]= p;
}
for (int i = n - 1; i >= 1; --i)
{
int p = i;
while (p < n && h[i] <= h[p + 1])
{
p = rp[p + 1];
}
rp[i]= p;
}
/* for (int i = 1; i <= n; ++i)
{
printf("%d ", lp[i]);
}
printf("\n");
for (int i = 1; i <= n; ++i)
{
printf("%d ", rp[i]);
}
printf("\n");*/
for (int i = 1; i <= n; ++i)
{
int l = lp[i];
int r = rp[i];
ans = max(ans, (r - l + 1) * h[i]);
}
printf("%I64d\n", ans);
}
return 0;
}hdu1506——Largest Rectangle in a Histogram
标签:dp
原文地址:http://blog.csdn.net/guard_mine/article/details/41204531