最大連續矩形面積(棧實現)
阿新 • • 發佈:2019-01-07
#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; }