题目链接
题目思路:贪心
假m[i]大于后面所有数的最大值maxm[i+1],不难发现,如果现在不输出m[i],那最后出栈的字典序一定小于当前的字典序
代码实现
#include<bits/stdc++.h>
using namespace std;
int maxm[1000005],m[1000005];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>m[i];
for(int i=n;i>=1;i--)
maxm[i]=max(maxm[i+1],m[i]);
stack<int> st;
bool flag=0;
for(int i=1;i<=n;i++)
{
st.push(m[i]);
while(!st.empty()&&st.top()>=maxm[i+1])
{
if(!flag)
{
flag=1;
cout<<st.top();
}
else
cout<<' '<<st.top();
st.pop();
}
}
return 0;
}
京公网安备 11010502036488号