题意:

有一个柱状图,有N条柱子。每一条柱子宽度都为1,长度为h1...hN。

在这N条柱子所构成的区域中找到一个最大面积,每平方米3块钱,问最多赚多少钱。

输入:

1<=N<=100000

0<=hi<=1000000000

思路:

N很大,肯定得用一个O(N)或O(NLOGN)的算法,,

假如这个面积的长是从第i条柱子到第j条柱子,宽则一定是第i条柱子到第j条柱子中最矮的那条柱子的高度。

而我们站在那根最矮的柱子向左看,第i-1条的柱子一定是小于当前柱子的,否则可以加进去。向右看同理。

所以了,咱们就枚举每一根柱子,把它当作一段区域中的最矮的那根,然后向左向右极大地去延伸。

具体如何延伸呢,

假设left[i]表示第i根向左最多延伸到的柱子编号

假设现在枚举到第k根柱子,如果第k-1根柱子高度小于本身,则向左没法延伸。如果大于等于,则从left[i-1]到i-1都是大于等于本身的,只需从left[i-1]-1开始继续往前比较,这里就可以用while循环实现了。

向右同理。

看代码,

代码:

int const N = 100005;

int h[N], leftt[N], rightt[N];

int main(){

    int n;
while(cin>>n,n){ mem(leftt,0);
mem(rightt,0); rep(i,1,n){
scanf("%d",&h[i]);
leftt[i] = rightt[i] = i;
}
rep(i,2,n){
if(h[i]<=h[i-1]){
leftt[i] = leftt[i-1];
while(leftt[i]>1 && h[i]<=h[leftt[i]-1]){
leftt[i] = leftt[leftt[i]-1];
}
}
}
rep2(i,n-1,1){
if(h[i]<=h[i+1]){
rightt[i] = rightt[i+1];
while(rightt[i]<n && h[i]<=h[rightt[i]+1]){
rightt[i] = rightt[rightt[i]+1];
}
}
} ll ans = 0;
rep(i,1,n){
ll temp = (ll)(rightt[i]-leftt[i]+1)*(ll)h[i];
if(temp>ans) ans = temp;
} printf("%I64d\n",ans); } return 0;
}

hdu 1506 Largest Rectangle in a Histogram(DP)的更多相关文章

  1. HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)

    E - Largest Rectangle in a Histogram Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format: ...

  2. HDU 1506 Largest Rectangle in a Histogram(区间DP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题目: Largest Rectangle in a Histogram Time Limit: ...

  3. Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K ...

  4. HDU 1506 Largest Rectangle in a Histogram(单调栈、笛卡尔树)

    题意:给定n个连续排列的矩形的高,矩形的宽都为1.问最大矩形覆盖. 例如:n = 7,h[i] = (2 1 4 5 1 3 3),最大覆盖为8. Sample Input 7 2 1 4 5 1 3 ...

  5. HDU 1506 Largest Rectangle in a Histogram【DP】

    题意:坐标轴上有连续的n个底均为1,高为h[i]的矩形,求能够构成的最大矩形的面积. 学习的别人的代码 @_@ 看底的坐标怎么找的看了好一会儿--- 记l[i]为矩形的底的左边的坐标,就将它一直向左扩 ...

  6. HDU 1506 Largest Rectangle in a Histogram set+二分

    Largest Rectangle in a Histogram Problem Description: A histogram is a polygon composed of a sequenc ...

  7. hdu 1506 Largest Rectangle in a Histogram 构造

    题目链接:HDU - 1506 A histogram is a polygon composed of a sequence of rectangles aligned at a common ba ...

  8. DP专题训练之HDU 1506 Largest Rectangle in a Histogram

    Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...

  9. hdu 1506 Largest Rectangle in a Histogram(单调栈)

                                                                                                       L ...

随机推荐

  1. CodeForce-803B Distances to Zero(贪心DP)

    Distances to Zero CodeForces - 803B 题意:给定一个数列 a0, a1, ..., an - 1.对于数列中的每一项都要求出与该项最近的0与该项的距离.保证数列中有至 ...

  2. 1.24学习总结——HTML常见标签

    HTML 标签简写及全称 下表列出了 HTML 标签简写及全称: 标签 英文全称 中文说明 a Anchor 锚 abbr Abbreviation 缩写词 acronym Acronym 取首字母的 ...

  3. PHP的DBA扩展学习

    今天我们讲的 DBA 并不是传统的数据库管理员那个 DBA ,而是一个 PHP 中的巴克利风格数据库的扩展.巴克利风格数据库其实就是我们常说的键值对形式的 K/V 数据库.就像我们平常用得非常多的 m ...

  4. vue跳转路由

    1.  router-link 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to=" ...

  5. Shell系列(3)- 命令别名

    前言 使用alias命令创建命令别名,是Bash的一个基本功能:别名有两种形式,一种暂时的,Linux重启后失效.另外一种永久的通过该配置文件实现 使用更改别名 临时 命令格式:alias 别名='原 ...

  6. jenkins+requests+pytest+allure持续集成

    环境搭建参考:https://www.jianshu.com/p/fc39030d057f 总体流程:

  7. filter_var() 验证邮箱、ip、url的格式 php

    验证邮箱格式的正确与否:你的第一解决方案是什么呢? 不管你们怎么思考的:反正我首先想到的就是字符串查找看是否有@符号: 但是对于结尾的.com或者.net 亦或者.cn等等越来越多的域名验证感觉棘手: ...

  8. Lucene基础入门

    1. 数据的分类 结构化数据: 查询方法     数据库 非结构化数据: 查询方法  : (1)顺序扫描法   : 一行一行的看,从头看到尾 (2)全文检索 : 将一部分信息提取出来,重新组织将其变得 ...

  9. P3649-[APIO2014]回文串【PAM】

    正题 题目链接:https://www.luogu.com.cn/problem/P3649 题目大意 一个字符串,求最大的回文串长度×出现次数 解题思路 构建出\(\text{PAM}\)然后统计一 ...

  10. EXP-00091 正在导出有问题的统计信息-处理方法

    打开oracle的SQL Puls中的命令如下: 1.conn /as sysdba   登陆 2.shutdown immediate;    关闭数据库 3.startup mount 4. AL ...