P2866 [USACO06NOV]糟糕的一天Bad Hair Day
首先让我们了解一下,对于本题单调栈的一个操作思路。
没看题的戳这里→题目。
先定义一个栈,然后我们遵循一个原则,我们先从头开始把奶牛的身高压入栈,(一定要记住是从前往后看)第一头直接压,不管,前面的看一下后面有没有比他高的,如果暂时没有就top- -(top是记录他*被*看的次数);直到有的时候,那么就把他
top++把他安在那里。
```cpp
#include<cstdio>
using namespace std;
const int N=100005;
int cow[N];
long long top,ans,n;
int main()
{
top=0;
ans=0;
scanf("%d",&n);
int x;
for(int i=1;i<=n;++i)
{
scanf("%d",&x);
while(top&&cow[top]<=x)
top--;//☣
ans+=top;
top++;
cow[top]=x;
}
printf("%lld
",ans);
}
```