Description
給出一個字符串,按照從前到后的順序進棧,輸出字典序最小的出棧序列
Solution
棧頂元素比未入棧的所有元素都小(不嚴格)時才出棧
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
char a[N],mx[N],s[N];
int n,top;
signed main() {
ios::sync_with_stdio(false);
cin>>a+1;
n=strlen(a+1);
mx[n+1]=127;
for(int i=n;i>=1;--i) mx[i]=min(a[i],mx[i+1]);
for(int i=1;i<=n;i++) {
s[++top]=a[i];
while(top && s[top]<=mx[i+1]) cout<<s[top], --top;
}
}