单调栈: 基础知识 百度一哈
题目:
单调栈 | 维护单调栈。每个矩形入栈时,判断它的高度是否大于等于栈顶矩形的高度,如果满足,则直接入栈。否则就向前找,一边出栈一边记录宽度,计算面积。知道找到第一个不满足条件的位置,然后将当前高度入栈。
#includeusing namespace std;int main(){ int n, x, ans = 0, ca = 0; stack s; while(cin >> n) { ans = 0; while(!s.empty()) s.pop(); for(int i = 0; i < n; i++) { cin >> x; if(s.empty()) { if(x) s.push(x); continue; }else { if(s.top() == x) { continue; }else if(s.top() < x) { s.push(x); }else { //弹 bool flag = true; while(!s.empty()) { if(s.top() > x) { s.pop(); ans++; }else if(s.top() == x) { flag = false; break; }else { if(x) s.push(x); flag = false; break; } } if(flag && x != 0) { s.push(x); } } } } ans += s.size(); ca++; printf("Case %d: %d\n",ca,ans); } return 0;}