Poj 2559 最大矩形面积
来源:互联网 发布:超时空拦截知乎 编辑:程序博客网 时间:2024/05/18 19:39
题目:
https://cn.vjudge.net/problem/POJ-2559
大意:给定一些长为1,高为x的连续矩形,求最大连续矩形面积
算法:单调栈;
题解:
维护一个高度单调递增的栈,栈中存结构体x,y,x表示高度,y表示以x为高度,向左扩展的最大宽度;
对于某一高度为h的矩形
1.当栈顶元素s.x小于h时,将{h,1}直接入栈;
2.当栈顶元素s.x大于h时,将栈顶元素弹出,并更新答案,重复步骤,直至栈顶元素小于h;
此时维护值k表示已弹出元素y的和,更新答案时,将s.x*(k+s.y);
k维护的是从s到右的大于s.x的连续宽度,所以以s.x为高的矩形向右扩展,最多能扩展k;
y为定义,记录答案;
3.将{h,k+1}入栈;
k是从h向左大于h的连续宽度,是以h为高,向左扩展的最大宽度;再加上h的宽度1;
4.全部入栈完毕后,执行出栈操作;
仍然如2维护k值,更新答案;
样例:7 2 1 4 5 1 3 3 ans=8;入栈 2 S <2,1> 1 pop<2,1> k=0,ans=(2,0)=2; S <1,2> 4 S<1,2> <4,1> 5 S<1,2> <4,1> <5,1> 1 pop <5,1> k=0; ans=(2,5)=5;k=1; pop <4,1> k=1; ans=(5,8)=8;k=2; pop <1,2> k=2; ans=(4,8)=8;k=4; push<1,5> 3 S <1,5> <3,1> 3 pop<3,1> k=0;ans=(3,8)=8;k=1; push<3,2> push S<1,5> <3,2> pop<3,2> k=0,ans=(6,8);k=2; pop<1,5> k=2,ans=(7,8);k=7;
代码:
#include<iostream>#include<cstdio>#include<stack>#include<algorithm>using namespace std;const int N=100000;int n,h[N];long long k,ans,now;struct node{ long long x,y;};stack<node> S;void init(){ now=0; k=0; while(!S.empty()) S.pop(); ans=0;}int main(){// freopen("data.txt","r",stdin);//freopen("my.out","w",stdout); while(scanf("%d",&n)!=EOF){ if(n==0) return 0; init(); for(int i=1;i<=n;i++) scanf("%d",&h[i]); S.push((node){h[1],1}); for(int i=2;i<=n;i++){ k=0;//cout<<i<<endl; while(1){ node u=S.top(); if(u.x>=h[i]){ now=u.x*(k+u.y); ans=max(ans,now); k+=u.y; S.pop(); } if(S.empty()){ S.push((node){h[i],k+1}); break; } if(u.x<h[i]){ S.push((node){h[i],k+1}); break; } } } k=0; while(!S.empty()){ node u=S.top(); now=u.x*(k+u.y); ans=max(ans,now); k+=u.y; S.pop(); } printf("%lld\n",ans); }}
阅读全文
0 0
- POJ 2559最大矩形面积
- Poj 2559 最大矩形面积
- Poj 2559 最大矩形面积
- POJ 2559 最大矩形面积 poj 3494
- Poj 2559 最大矩形面积 v单调栈
- POJ 2559 题解 最大矩形面积 单调栈
- poj 2559 求连续的最大矩形面积(也可用于ccf最大连续矩形面积)
- POJ 2559 最大矩形。。
- 最大矩形面积问题
- 【最大子矩形】面积
- 【最大子矩形】面积
- POJ2559 最大矩形面积
- POJ2082 最大矩形面积
- 求最大矩形面积
- 直方图最大面积矩形
- 最大矩形面积
- 最大连续矩形面积
- POJ2559 最大矩形面积
- easyui-dialog中无法显示KindEditor插件
- rn 启动项目失败:A problem occurred configuring project ':app'. (二)
- C#类和结构(1)
- Django具体导出excel、json、zip文件
- Java并发编程实战(二)基础构建模块
- Poj 2559 最大矩形面积
- python--threading多线程总结
- PAT乙级(Basic Level)真题-1016. 部分A+B (15)
- Linux命令记录
- Mybatis学习总结
- iOS- 来和我一起捣鼓微信支付吧
- 只能在堆或栈上创建对象
- 原码、反码、补码详解
- Java反射,几问?