题目大意:
有n头牛头站成一列。每头牛有必然的高度,并且能看到其前面高度比它低的牛的头顶,直到被某头高度大于等于它的牛所挡住。求每头牛能看到的牛头顶的数量之和。
思路分析:单调队列。从左往右扫,从队尾加入元素时遇到比他小的就删掉,每加入一次统计一次队列的长度
#include<stdio.h>
int a[80010],f[80010];
int main()
{
int n,i,l;unsigned long long s=0;
scanf("%d%d",&n,&a[1]);
f[1]=a[1];l=1;
for (i=2;i<=n;i++)
{
scanf("%d",&a[i]);
while ((a[i]>=f[l])&&(l>0)) l--;
l++;f[l]=a[i];
s=s+l-1;
}
printf("%u\n",s);
return 0;
}