P2866 [USACO06NOV]糟糕的一天Bad Hair Day
奶牛题里好多单调栈.....
维护一个单调递减栈,存每只牛的高度和位置,顺便统计一下答案。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define N 80010 6 int n,tp,q[N],h[N]; 7 long long ans; 8 int main(){ 9 scanf("%d",&n); 10 for(int i=1,v;i<=n;++i){ 11 scanf("%d",&v); 12 while(tp&&h[tp]<=v) ans+=i-q[tp--]-1; 13 q[++tp]=i; h[tp]=v; 14 }while(tp) ans+=n-q[tp--];//最后栈内剩下的记得算 15 printf("%lld",ans); 16 return 0; 17 }