題目鏈接:
題目解析:
很裸的一道題......主要是爲了回顧一下單調棧的用法
小於棧頂元素直接入棧,反之彈出棧內所有不大於當前元素的數並記錄答案
保證了出棧元素單調增
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]);
}