1. 程式人生 > >POJ - 2559 單調棧

POJ - 2559 單調棧

相對 全部 top stl ans clas body 延伸 bre

算是回顧吧
掃描計算時的高度是單調遞減的,
最相對較高的能延伸的矩陣[全部]計算完以後都合並成一個待計算的相對較矮的單一矩陣
規定合並後的矩陣留到下一次計算
一直掃描到棧空(哨兵h[n+1]==0處)即可
STL炒雞好用幹嘛要手寫啊

/*H E A D*/
int main(){
    int n,h[maxn],w[maxn];
    stack<int> stk;
    while(~iin(n)){
        if(n==0)break;
        rep(i,1,n) h[i]=read();
        while(!stk.empty()) stk.pop();
        h[n+1
]=0; ll ans=0; rep(i,1,n+1){ if(stk.empty()||stk.top()<h[i]){ stk.push(h[i]); w[stk.size()]=1; }else{ int width=0; while(!stk.empty()&&stk.top()>h[i]){ int t=stk.top(); width+=w[stk.size()]; stk.pop(); ans=max(ans,1ll
*t*width); } stk.push(h[i]); w[stk.size()]=width+1; } } println(ans); } return 0; }

POJ - 2559 單調棧