#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 50010
struct S{
int startPos;
int w,h;
S(int start=0,int ww=0,int hh=0){
startPos=start;
w=ww;
h=hh;
}
}stack[N];
S st;
int n;
int a[N],b[N];
int main(){
while(~scanf("%d",&n)){
if(n==-1) break;
int top=0;
scanf("%d%d",&a[0],&b[0]);
st.startPos=0;
st.w=a[0];
st.h=b[0];
stack[top]=st;
int res=a[0]*b[0];
for(int i=1;i<n;i++){
scanf("%d%d",&a[i],&b[i]);
st.startPos=i;
while(top>=0 && b[i]<stack[top].h){
//puts("1");
st=stack[top];//更新起点的位置
top--;
int ww=0;
for(int j=st.startPos;j<i;j++)
ww+=a[j];
int ans=st.h*(ww);
res=max(res,ans);
}
st.w=a[i];
st.h=b[i];
stack[++top]=st;
}
while(top>=0)
{
int ww=0;
for(int i=stack[top].startPos;i<n;i++) ww+=a[i];
int temp = stack[top].h*ww;
//printf("temp=%d\n",stack[top].startPos);
res=max(res,temp);
top--;
}
printf("%d\n",res);
}
return 0;
}
POJ 2082 Terrible Sets
最新推荐文章于 2022-10-15 21:35:20 发布