一群高度不完全相同的牛从左到右站成一排,每头牛只能看见它右边的比它矮的牛的发型,若遇到一头高度大于或等于它的牛,则无法继续看到这头牛后面的其他牛。
给出这些牛的高度,要求每头牛可以看到的牛的数量的和。
输入 第一行:一个整数 n ( 10 ≤ ? ≤ 10^6 ) (10≤n≤10 ^6 )。
第二行:n个整数,从左到右依次给出每头牛的高度,不大于 10^6 。
输出 一行一个整数,为答案。
样例输入:
5
3 2 4 1 5
输出:
2
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
stack <ll> s;
ll n,ans;
ll a[N];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
s.push(1);
for(int i=2;i<=n;i++)
{
while(!s.empty()&&a[s.top()]<a[i]) s.pop();
if(!s.empty()&&a[i]<a[s.top()]) ans++;
s.push(i);
}
cout<<ans;
return 0;
}
违规紫衫