这个题一看类似于欢动窗口,只是滑动窗口是从左向右的,这个是从右向左的,就是使用双端队列时改个方向就好了.思路大致相同.从右向左遍历,如果当前队列里没有元素,则说明当前处理的牛是最高的,它就要为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;
}