题目链接

对栈的一种灵活运用吧算是,希望我的注释写的足够清晰。。

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=;
int Stack[N]; //Stack[]为单调栈(即每次能入栈的元素值必比栈顶元素(若存在)要大)
int len[N]; //len[]与Stack[]同步 ,记录的是从Stack[]中对应元素起向左最大可延伸的宽度
int n;
LL top,ans,h; void print()
{
printf("top=%d, ans=%d\n",top,ans);
printf("\tStack:");
for(int i=;i<=top;i++)
printf("%6d",Stack[i]);
puts("");
printf("\t len:");
for(int i=;i<=top;i++)
printf("%6d",len[i]);
puts("");
} int main()
{
while(scanf("%d",&n)&&n)
{
memset(Stack,,sizeof(Stack));
memset(len,,sizeof(len));
top=-,ans=;
for(int i=; i<=n; i++)
{
if(i<n) scanf("%lld",&h);
else h=-; //用作结束标记
if(top<||Stack[top]<h)
{
Stack[++top]=h; // h入栈
len[top]=; // 显然新入栈元素比原栈顶元素大,此时向左最大延伸“1”宽度
} // “1”可根据具体题目进行修改~
else // if(top>=0&&Stack[top]>=h
{
int l=;
while(Stack[top]>=h&&top>=)
{
ans=max(ans,(LL)(len[top]+l)*Stack[top]); //更新ans
l+=len[top--]; //Stack[]和len[]同时将栈顶元素弹出
} //循环结束后, top<0||Stack[top]<h
if(h>)
{
Stack[++top]=h; // h入栈
len[top]=l+; // 以top为起点的最长连续(h>=Stack[top])的区间长度
}
}
// print();
}
printf("%lld\n",ans);
}
}

hdu 1506:Largest Rectangle in a Histogram 【单调栈】的更多相关文章

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

                                                                                                       L ...

  2. HDU - 1506 Largest Rectangle in a Histogram (单调栈/笛卡尔树)

    题意:求一个直方图中最大矩形的面积. 很经典的一道问题了吧,可以用单调栈分别求出每个柱子左右两边第一个比它低的柱子(也就相当于求出了和它相连的最后一个比它高的柱子),确定每个柱子的左右边界,每个柱子的 ...

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

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

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

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

  5. 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 ...

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

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

  7. 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 ...

  8. Hdu 1506 Largest Rectangle in a Histogram 分类: Brush Mode 2014-10-28 19:16 93人阅读 评论(0) 收藏

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. HDU 1506 Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  10. poj 2559 Largest Rectangle in a Histogram - 单调栈

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19782 ...

随机推荐

  1. HDU6424 Rikka with Time Complexity

    HDU6424 Rikka with Time Complexity 数学题~(真的数学题) #include <bits/stdc++.h> #define mp(_,__) make_ ...

  2. 学习使用Delphi for android 调用Java类库

    http://blog.csdn.net/laorenshen/article/details/41148253 学习使用Delphi for android 调用Java类库 2014-11-15 ...

  3. delphi 获取文件的最新修改时间 http://www.delphitop.com/html/wenjian/64.html

    delphi 获取文件的最新修改时间 作者:admin 来源:未知 日期:2010/1/28 13:15:22 人气:1054 标签: QQ空间新浪微博腾讯微博腾讯朋友QQ收藏百度空间百度贴吧更多0 ...

  4. VUEJS(vuejs) 数组数据不及时刷新

    在Vue对象中的methods属性中构建一个方法用于刷新data使用Vue.set方法进行手动刷新methods:{update:function(o){Vue.set(this,'list',o); ...

  5. 设置chrome解决跨域问题

    开发中遇到跨域问题, 解决方法一 以关闭安全验证模式启动chrome,就不会报跨域了  开发阶段,用这个方式是可以的,不然他需要后台配置成 * , 发布会有风险  设置方法:  --disable-w ...

  6. c语言自带的排序与查找

    qsort与bsearch qsort(元素起始地址,元素总数,单个元素的大小,比较函数) bsearch(key元素地址,元素起始地址,元素总数,单个元素的大小,比较函数) 比较函数: 原型为int ...

  7. mglearn初探

    这个是取自于<python机器学习基础教程>16页 代码: # import numpy as np # import matplotlib.pyplot as plt # import ...

  8. 关于Object.create()与原型链的面试题?

    原文地址 https://segmentfault.com/q/1010000004670616?utm_source=weekly&utm_medium=email&utm_camp ...

  9. javaScript Map

                  }                   } }                          vertices.push(v);         adjList.set ...

  10. [Linux] 016 压缩解压命令

    1. 压缩解压命令:gzip 命令名称:gzip 命令所在路径:/bin/gzip 执行权限:所有用户 语法:gzip [文件] 功能描述:压缩文件 压缩后文件的格式:.gz 补充: 解压 .rar ...