poj 2082 栈

#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;

struct rec
{
int w;
int h;
}data;

int main()
{
int n;
int ans,i;
int lasth,totalw,curarea;
while(scanf("%d",&n),n!=-1)
{
ans=0; //
stack<rec>s;
lasth=0;
for(int 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;
}

你可能感兴趣的:(poj 2082 栈)