最大连续矩形面积(栈实现)

来源:互联网 发布:java d 系统参数 编辑:程序博客网 时间:2024/04/28 10:14
#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;}

0 0
原创粉丝点击