(1) 单调栈
class Solution {
public:
int trap(vector<int>& h) {
stack<int> s;
int sum=0,top,left;
for(int i=0;i<h.size();i++) {
while(!s.empty() && h[i]>h[s.top()]) {
top=s.top();
s.pop();
if(s.empty()) break;
left=s.top();
sum=sum+(min(h[left],h[i])-h[top])*(i-left-1);
}
s.push(i);
}
return sum;
}
};