堆栈是一种先进后出的数据结构。他有一个栈顶指针,通过对对战的入栈和出栈的控制,可以改变一个序列的顺序。
这道题很不易发现的是在输入的n组矩形数据之中要找出组成的最大面积可以把长度大切割。
代码之中注意ans的重大作用。
#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
struct rec
{
int w;
int h;
}data;
int main()
{
int n,ans,i,lasth,totalw,curarea;
while(scanf("%d",&n) && n != -1){
ans = 0;
stack<rec>s;
lasth = 0;
for(i = 0;i < n; i++){
scanf("%d%d",&data.w,&data.h);
if(data.h >= lasth)
s.push(data);
else {
totalw = 0;
curarea = 0;
while(!s.empty() && s.top().h > data.h){
totalw += s.top().w;
curarea = totalw * s.top().h;
if(curarea > ans)
ans = curarea;
s.pop();
}
totalw += data.w;
data.w = totalw;
s.push(data);
}
lasth = data.h;
}
totalw = 0;
curarea = 0;
while(!s.empty()){
totalw += s.top().w;
curarea = totalw * s.top().h;
if(curarea > ans)
ans = curarea;
s.pop();
}
printf("%d\n",ans);
}
return 0;
}