(跳的别人的图)
用栈过一遍,得到一个单调递减的栈。
其实比较简单:就是看将要填入的元素对于接下来的数据是否还存有意义,当下一个元素比栈顶元素大于等于时,即可以判定栈顶元素已经没有存在的意义了,也就是这头牛看不到别的牛了。
当该元素小于栈顶元素时,即加上去除栈顶元素后的栈的元素个数。
首先定义一个栈,和一个计数装置,先把第一组数据填入。
此时把栈顶元素与下一个要填入的数作比较。
1.若此时该元素大于等于栈顶元素,则舍弃栈顶元素,因为这只牛失去了存在的意义。
2.若此时该元素小于栈顶元素,则将该元素加入该站,并使计数装置加上去除栈顶元素后的栈的元素个数。
最后输出该计数装置。
#include<bits/stdc++.h>
using namespace std;
stack<long long>gao;
int main(){
int n,shu;
long long q,ci=0;
cin>>n;
cin>>shu;
gao.push(shu);
for(long long i=2;i<=n;i++){
cin>>shu;
if(shu>=gao.top()){
while(!gao.empty()&&shu>=gao.top()){
gao.pop();
}
ci=ci+gao.size();
gao.push(shu);
}
else{
ci=ci+gao.size();
gao.push(shu);
}
}
cout<<ci;
return 0;
}