题目意思
牛1向右看,看得见 牛2,3,4, 看不见 牛5 以及 牛5以后的牛。
求每一个牛能看见牛的个数。spa
1 2 3 4 5 6
O O
OO O
OOO O
OOOOOOcode
题解:维护一个单调递减栈,只要求每一个最大值的右区间便可)。ci
#include <cstdio> #include <iostream> #include <stack> typedef long long int ll; const int MAXN = 8e4 + 3; using namespace std; ll height[MAXN]; int main(){ int N; ll ans = 0; cin >> N; for(int i=0;i<N;i++) cin >> height[i]; height[N] = 1e10; stack<int> s; for(int i=0;i<=N;i++){ while(!s.empty()&&height[s.top()] <= height[i]){ ans += (i-s.top()-1); s.pop(); } s.push(i); } cout << ans << endl; return 0; }