题目链接:
题目解析:
很裸的一道题......主要是为了回顾一下单调栈的用法
小于栈顶元素直接入栈,反之弹出栈内所有不大于当前元素的数并记录答案
保证了出栈元素单调增
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int s[3000100],top=0,num[3000100];
int ans[3000100];
int main()
{
scanf("%d",&n);
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
while(x>s[top] && top)
{
ans[num[top]]=i;
top--;
}
s[++top]=x;
num[top]=i;
}
for(int i=1;i<=n;i++) printf("%d ",ans[i]);
}