把题改成了按输入顺序入栈能否倒序出栈 原题懒得打了,太伤心了,直接抄答案了
#include <iostream> #include <cstring> #include <queue> #include <deque> #include <math.h> #include <map> #include <stack> #include<cstring> #include<cstdio> #include<string> #include<algorithm> #define RG register int #define rep(i,a,b) for(RG i=a;i<=b;++i) #define per(i,a,b) for(RG i=a;i>=b;--i) #define ll long long #define inf (1<<29) using namespace std; const int maxn=1000+5; queue<int> qu; stack<int> sta1,sta2; inline int read(){ int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } inline void clean(){ queue<int> emptya; swap(emptya,qu); } void d0(int n){ int num=n; while(!qu.empty()) { int temp=qu.front(); sta1.push(temp); qu.pop(); if(temp==num){ while(sta1.size() && sta1.top()==num)sta1.pop(),cout<<num,num--; } } if(!num)cout<<"Yes "; else cout<<"No "; } int main() { int n; while(cin>>n && n) { int i=1; while(i<=n){ if(i==1)clean(); int temp=read(); qu.push(temp); if(!temp){break;} if(i==n){d0(n),i=1;} else i++; } cout<<endl; } return 0; }