这也是一道单调队列的题目哈
总结一下:题目要求你让奶牛排成一排,看每一只奶牛能看到最近的比他高的奶牛,如果啥也没看到就输出0,那就直接初始化一个数组所有元素为0,之后呢创建单调队列,因为是看到最近的高的,所以该单调队列还是应该是递减的,因为只要新来的元素比栈顶的高,那么栈顶元素弹出并且修改saw数组,然后正常输出答案就行
#include <iostream>
#include<stack>
using namespace std;
const int maxn = 100000 + 50;
int cow[maxn];
int H[maxn];
int saw[maxn] = { 0 };
int s[maxn];
int top = 0;
int main()
{
int n;
cin >> n;
for (int i = 1;i <= n;i++)
{
cin >> H[i];
while (H[s[top]] < H[i]&&top)saw[s[top--]] = i;
s[++top] = i;
}
for (int i = 1;i <= n;i++)
{
cout << saw[i]<<endl;
}
}