#include<bits/stdc++.h>
using namespace std;
int a[1000];
stack<int> st;
vector<int> ve;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=n;i>=1;i--)
{
while(!st.empty()&&a[i]>a[st.top()]) st.pop();
if(st.empty())
ve.push_back(i);
else ve.push_back(st.top());
st.push(i);
}
reverse(ve.begin(),ve.end());
for(int i=0;i<n;i++)
printf("%d ",ve[i]);
return 0;
}
单调栈寻找右边第一个大于的数
最新推荐文章于 2024-05-02 14:50:02 发布