有 n 头牛头面向右站成一条直线。每头牛有一定的高度,并且能看到其前面高度比它低的牛的头顶,直到被某头高度大于等于它的高度的牛所挡住。给出n和每头牛的高度,计算每头牛能看到的牛头顶的数量的和。
输入
一行:个整数n(n<=10^6)
二行: n个整数,从左到右依次给出每头牛的高度hi,不大于10^9
输出
一行一个整数,为答案。
有n头牛头面向右站成一条直线。每头牛有一定的高度,并且能看到其前面高度比它低的牛的头顶,直到被某头高度大于等于它的高度的牛所挡住。给出n和每头牛的高度,计算每头牛能看到的牛头顶的数量的和。
输入
第一行一个整数n(1≤n≤10^6)。
第二行n个整数,用空格隔开。第i个数字表示编号为i的人身高为 ai(0<ai≤10^9)。
输出
一行一个整数,为答案
二题代码相同
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct st{
int a,b;
}a[1000005];
int n,b[1000005],ans;
stack<st>s;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].a;
a[i].b=i;
}
for(int i=1;i<=n;i++){
while(s.size()>0 && a[i].a>=s.top().a){
ans+=a[i].b-s.top().b-1;
s.pop();
}
s.push(a[i]);
}
while(s.size()){
ans+=n-s.top().b;
s.pop();
}
cout<<ans;
return 0;
}
1185

被折叠的 条评论
为什么被折叠?



