题意:输入一些矩形的宽度和高度,矩形沿着x轴对齐,输出这些矩形组成的连续矩形区域的最大面积。
用栈来存矩形的宽和高,且维护栈内高递增。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stack>
#include<iostream>
#include<algorithm>
using namespace std;
stack<int>w,h;
void init(){
while(!w.empty())w.pop();
while(!h.empty())h.pop();
}
int main(){
int n,i,j,tmpw,tmph;
while(scanf("%d",&n)!=EOF && n!=-1){
init();
int maxarea=0;
for(i=0;i<n;i++){
scanf("%d%d",&tmpw,&tmph);
if(w.empty()){
w.push(tmpw);
h.push(tmph);
}else{
int sumw=0;
int tmphh;
while(!h.empty() && h.top()>=tmph){
tmphh=h.top();
sumw+=w.top();
if(tmphh*sumw>maxarea)maxarea=tmphh*sumw;
h.pop();
w.pop();
}
h.push(tmph);
w.push(tmpw+sumw);
}
}
int tmphh;
int sumw=0;
while(!h.empty()){
tmphh=h.top();
sumw+=w.top();
if(tmphh*sumw>maxarea)maxarea=tmphh*sumw;
h.pop();
w.pop();
}
printf("%d\n",maxarea);
}
return 0;
}