当前位置: 代码迷 >> 综合 >> POJ - 3250 Bad Hair Day(单调栈)
  详细解决方案

POJ - 3250 Bad Hair Day(单调栈)

热度:95   发布时间:2023-11-25 09:13:17.0

POJ - 3250 Bad Hair Day(单调栈)

题意:n头牛,当i>j,j在i的右边并且i与j之间的所有牛均比i矮,i就可看到j。i可看到的所有牛数记为ai,求S(ai),(1<=i<=n)。

转化一下,求j可以被多少牛看到。这样就直接单调栈,求从j往前单调递增的数量。

#include<cstdio>
#include<stack>
using namespace std;
int main()
{
    int n;while(~scanf("%d",&n)){
    stack<int>s;long long ans=0;int x;scanf("%d",&x);s.push(x);for(int i=2;i<=n;i++){
    scanf("%d",&x);while(!s.empty()&&x>=s.top()) s.pop();ans+=s.size();s.push(x);} printf("%lld\n",ans);}return 0;
}