這個題用類似單調隊列的思想,並反過來思考,想每個牛能被多少牛看到,那麼在這之前如果有小於等於當前牛高度的那麼一定看不到了。
代碼:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<stack>
using namespace std;
const int maxn=8e4+100;
int n,a[maxn];
stack<int> s;
int main()
{
while(scanf("%d",&n)!=EOF)
{
while(!s.empty())
s.pop();
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
long long ans=0;
for(int i=1;i<=n;i++)
{
while(!s.empty()&&s.top()<=a[i])
s.pop();
ans+=s.size();
s.push(a[i]);
}
printf("%I64d\n",ans);
}
return 0;
}