入栈出栈,一个栈就可以解决,本来打算写两个栈的
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
const int N=1000+10;
stack<int> s,s_empty;
int n,target[N];
int input(){
int c;
cin>>c;
if(c==0) return 0;
target[1]=c;
for(int i =2; i <=n ;i++){
cin>>target[i];
}
return 1;
}
int main(){
while(cin>>n&&n){
start:
int k = input();
if(k==0) {cout<<endl; continue ;}
int A=1,B=1;
s=s_empty;
while(B<=n){
if(A==target[B]) { B++;A++;}
else if(!s.empty()&&s.top()==target[B]){ s.pop() ,B++; }
else if(A<target[B]) { s.push(A++);}
else { cout<<"No"<<endl; break;}
}
if(B==n+1) cout<<"Yes"<<endl;
goto start;
}
return 0;
}