牛客数据结构单调栈训练题 Bad Hair Day
嘛,这是一道之前在比赛的时候和左学长研究过的题,多亏了左学长,现在这题能秒出。
解题方法是这样的:
每次在栈里放入一个高度,但放入之前,需要保证栈里面的元素是单调的,就相当于对于每一个比当前高度高的牛都做了贡献,每次答案加上单调栈里面的元素个数即可,很简单
上代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=8e4+7;
stack <int> Q;
int n,x;
long long ans=0;//注意开longlong
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
while (!Q.empty() && Q.top()<=x)
Q.pop();
ans+=Q.size();
Q.push(x);
}
printf("%lld",ans);
return 0;
}