本题解使用从栈顶到栈底单调递减的栈。
遍历整个数组的索引,若栈为空,则将该索引放入栈里,若栈不为空,则比较栈顶索引对应的值与当前遍历到的索引对应的值。
1、若栈顶索引对应的值较小,则继续将当前遍历到的索引放入栈中
2、若栈顶索引对应的值较大,则将该索引从栈顶弹出。
_ = input()
nums = list(map(int, input().split()))
stack = []
ans = [[-1, -1] for _ in range(len(nums))]
for i in range(len(nums)):
while stack and nums[stack[-1]] > nums[i]:
ans[stack[-1]][1] = i
stack.pop()
if stack:
if nums[stack[-1]] < nums[i]:
ans[i][0] = stack[-1]
elif nums[stack[-1]] == nums[i]:
ans[i][0] = ans[stack[-1]][0]
stack.append(i)
for i, j in ans:
print(i, j)