hdu 1506 Largest Rectangle in a Histogram
来源:互联网 发布:淘宝衣服女装夏装 编辑:程序博客网 时间:2024/06/06 06:55
说是动态规划的题,但是说实话我没看出来
我的做法是找出当前位置左侧比a[i]高的个数l[i]和右侧比a[i]高的个数r[i]
二重循环,因为n最大为1e5,因此O(n*n)超时
看了别人的代码,虽然想法一样,但是找的不是两侧比当前高度高的个数,而是边界下标
比如第i个位置左侧比a[i]高度高的边界下标是l[i]==j,那么寻找第i+1个位置的左侧高度下标边界时
若a[i]>=a[i+1],那么直接判断a[l[i]]和a[i+1],因为j到i之间的高度都比a[i]高,因此必然比a[i+1]高
代码如下:
#include <iostream>#include <cstdio>#define ll long long#define MAXN 100010using namespace std;ll a[MAXN];ll l[MAXN];ll r[MAXN];int main(void){int n;int t;while(cin >> n, n){for(int i=1; i<=n; ++i){scanf("%d", &a[i]);}l[1] = 1;r[n] = n;for(int i=2; i<=n; ++i){t = i;while(t>1 && a[i]<=a[t-1]){t = l[t-1];}l[i] = t;//cout << "l[" << i << "] = " << l[i] << endl;}for(int i=n-1; i>0; --i){t = i;while(t<n && a[i]<=a[t+1]){t = r[t+1];}r[i] = t;//cout << "r[" << i << "] = " << r[i] << endl; }ll maxdp = 0;for(int i=1; i<=n; ++i){maxdp = max(maxdp, (r[i]-l[i]+1)*a[i]);}cout << maxdp << endl;}}
0 0
- hdu 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- hdu 1506 Largest Rectangle in a Histogram
- 【机器学习算法-python实现】扫黄神器-朴素贝叶斯分类器的实现
- 彻底搞定C指针--“函数名与函数指针”
- J2ME中如何使用drawString()
- Ubuntu14.04+eclipse下cocos2d-x3.0正式版环境的搭建
- ZOJ-1954
- hdu 1506 Largest Rectangle in a Histogram
- haproxy 配置 说明
- codeforces 426/A
- Java 5种字符串拼接方式性能比较。
- [Code Jam] Bribe the Prisoners
- android AsyncTask
- Codeforces Round #243 (Div. 2)——Sereja and Swaps
- C++ string_demo
- 揭秘SNS自主创业军团 军团高层月赚10万元不是问题