三水 网站建设,公司企业黄页,大型网站制作报价,做的网站打印全乱掉了Largest Rectangle in a Histogram
luogu-SP1805
poj 2559
题目大意#xff1a;
有n个并排的矩阵#xff0c;高度为aia_iai#xff0c;宽度为1#xff0c;现在让求包含于这些矩阵的并集内部的最大矩阵的面积
输入样例
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0输出…Largest Rectangle in a Histogram
luogu-SP1805
poj 2559
题目大意
有n个并排的矩阵高度为aia_iai宽度为1现在让求包含于这些矩阵的并集内部的最大矩阵的面积
输入样例
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0输出样例
8
4000数据范围
1⩽n⩽1000001\leqslant n\leqslant 1000001⩽n⩽100000 0⩽hi⩽10000000000\leqslant h_i\leqslant 10000000000⩽hi⩽1000000000
解题思路
我们可以建立一个单调不下降的栈然后遇到下降的矩阵时就让前面的统计一遍然后宽度累加到当前矩阵然后重复这个操作
代码
#includecstdio
#define max(a,b) (a)(b)?(a):(b)
using namespace std;
int n;
long long x,num,top,ans,s[100500],w[100500];
int main()
{scanf(%d,n);while(n){ans0;for (int i1;in;i){scanf(%lld,x);num0;while(s[top]x)//高出部分{numw[top];//比他高的可以降低高度然后一起计算ansmax(ans,num*s[top]);//计算结果top--;//出栈}s[top]x;//入栈w[top]num1;//宽度累加在当前矩阵因为当前矩阵比他们都矮}num0;while(top)//把剩下的也计算一遍{numw[top];ansmax(ans,num*s[top]);top--;}printf(%lld\n,ans);scanf(%d,n);}
}