这道题就是最基础的单调栈。
所谓的单调栈就是,维护栈内元素使其保持单调性。有了单调栈我们就可以在O(n)的复杂度下解决一些特定的问题
这道题的意思是问你所有的牛都往右看,能看见牛的数目总和。
题目样例都解释的很清楚了。直接上代码吧。
#include <iostream> #include <cstdio> #include <cstring> #include <stack> using namespace std; int top, n; stack<int> s; int main() { long long num; long long ans = 0; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%lld", &num); while (!s.empty() && s.top() <= num) s.pop(); ans += s.size(); s.push(num); } printf("%lld\n", ans); return 0; }