单调栈
因为每个奶牛的仰视对象都在右边, 因此, 循环是从右往左.
对于任意两个元素来说, 元素值越大越好, 索引值越小越好.
因此, 栈里面的对象的元素值应该是单调下降的, 这样的话, 每个元素都是帕累托最优的.
时间复杂度
对于每个元素, 入栈1次, 出栈0次或者1次.
因此, 时间复杂度是O(N)
Python 代码
N = int(input())
A = [0] * N
ans = [0] * N
for i in range(N):
A[i] = int(input())
stack = []
for i in range(N - 1, -1, -1):
while stack and A[stack[-1]] <= A[i]:
stack.pop()
if not stack:
ans[i] = 0
else:
ans[i] = stack[-1] + 1
stack.append(i)
for i in range(N):
print(ans[i])