题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1660
解:第一次做单调栈的题目,我们从前往后访问,每访问到一个数,就把栈顶小于等于目前的数的数弹出,栈中剩下的就是能够看到目前这头牛的牛的数量。
程序:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<stack> using namespace std; long long ans; int n,x; stack<int>s; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&x); while ((!s.empty())&&(s.top()<=x)) s.pop(); ans+=s.size(); s.push(x); } printf("%lld\n",ans); }