poj2082单调栈

和我的上一篇博客(poj2559单调栈)基本做法一致,就不多说了

#include<stdio.h>
#include<stack>
using namespace std;

struct sets{
    int high,wide;
}data;

int main()
{
    int n;
    while(scanf("%d",&n),n!=-1)
    {
        stack<sets>A;
        int totalwide=0,tempans=0;
        scanf("%d%d",&data.wide,&data.high);
        A.push(data);
        int ans=data.high*data.wide;
        
        for(int i=1;i<n;i++){
            scanf("%d%d",&data.wide,&data.high);
            if(data.high>=A.top().high)
                A.push(data);
            else{
                totalwide=tempans=0;
                while(!A.empty()&&A.top().high>data.high){
                    totalwide+=A.top().wide;
                    tempans=totalwide*A.top().high;
                    if(tempans>ans)
                        ans=tempans;
                    A.pop();
                }
                totalwide+=data.wide;
                data.wide=totalwide;
                A.push(data);
            }
        }

        totalwide=tempans=0;
        while(!A.empty()){
            totalwide+=A.top().wide;
            tempans=totalwide*A.top().high;
            A.pop();
            if(tempans>ans)
                ans=tempans;
        }
        printf("%d\n",ans);
    }
    return 0;
}


你可能感兴趣的:(poj2082单调栈)