这个题一看类似于欢动窗口,只是滑动窗口是从左向右的,这个是从右向左的,就是使用双端队列时改个方向就好了.思路大致相同.从右向左遍历,如果当前队列里没有元素,则说明当前处理的牛是最高的,它就要为0.存储答案可以用stack来存储

#include<iostream>
#include<queue>
#include<stack>
using namespace std;
const int N=1e6+10;
int h[N];
deque<int>q;
stack<int> ans;
int n;
int main()
{
	cin>>n;
    for(int i=1;i<=n;i++)cin>>h[i];
    for(int i=n;i>0;i--)
    {
    	while(!q.empty()&&h[q.front()]<=h[i])q.pop_front();//只能仰望比它高的,所以一边高的也不好使
        if(q.empty())ans.push(0);
        else ans.push(q.front());
        q.push_front(i);
    }
    while(!ans.empty())
    {
    	cout<<ans.top()<<endl;
        ans.pop();
    }
    return 0;
}