2.5 栈和排序
题目链接
题目思路:贪心
假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; }