#include<iostream>
#include<stack>
using namespace std;
struct Node
{
int w,h;
};
int main()
{
int n;
while(cin>>n&&n!=-1)
{
stack<Node>s;
Node* rect=new Node[n+2];
int i;
int total_w,cur_area,max_area=0;
for(i=0;i<n;i++)
{
cin>>rect[i].w>>rect[i].h;
if(s.empty())
s.push(rect[i]);
else
{
if(rect[i].h>=s.top().h)
s.push(rect[i]);
else
{
total_w=cur_area=0;
while(!s.empty())
{
if(rect[i].h<s.top().h)
{
total_w+=s.top().w;
cur_area=total_w*s.top().h;
if(cur_area>max_area)
max_area=cur_area;
s.pop();
}
else break;
}
total_w+=rect[i].w;//加上将要入栈的元素的宽度
rect[i].w=total_w;//合并成新的矩形
s.push(rect[i]);
}
}
}
total_w=cur_area=0;
while(!s.empty())
{
total_w+=s.top().w;
cur_area=total_w*s.top().h;
if(cur_area>max_area)
max_area=cur_area;
s.pop();
}
cout<<max_area<<endl;
delete []rect;
}
return 0;
}
最大连续矩形面积(栈实现)
最新推荐文章于 2021-10-19 13:18:53 发布