就是查看出队序列合不合理罢了,只要和数组中的数一致按需出队即可。
#include <bits/stdc++.h> using namespace std; const int maxn = 100000+10; int a[maxn]; int n; bool is_end() { cin>>n; return n==0? false : true; } int main() { int k; while (is_end()) { cin>>k; if (k==0) cout<<endl; stack<int> sk; while (k!=0) { stack<int> sk; a[1] = k; for (int i=2;i<=n;i++) { cin>>a[i]; } int j = 1; for (int i=1;i<=n;i++) { sk.push(i); while (!sk.empty()&&sk.top()==a[j]) { sk.pop(); j++; } } if (sk.empty()) cout<<"Yes\n"; else cout<<"No\n"; cin>>k; if (k==0) cout<<endl; } } return 0; }