有一说一,其实挺水
做一个以身高为关键字的单调栈储存每个奶牛的序号,再单独以一个数组存储身高,在弹出时处理它对答案的贡献,显然为当前序号到它的序号的差减一
最后注意一下数据大小开个longlong
#include<bits/stdc++.h>
using namespace std;
int n,a[110086],tmp,c[110086],num;
int main () {
freopen("hair.in","w",stdin);
freopen("hair.out","r",stdout);
cin>>n;
for(int i = 1; i<=n; i++){
int y;
cin>>y;
while(y>=c[a[tmp-1]]&&tmp>0){
num+=i-a[tmp-1]-1;
tmp--;
}
c[i]=y;
a[tmp++]=i;
}
while(tmp>0){
if(a[tmp-1]!=n)num+=n-a[tmp-1];
tmp--;
}
cout<<num;
return 0;
}