简单的写一下对算法的理解。
#include<cstdio>
#include<stack>
using namespace std;
const int maxn = 1000 + 10;
int n,target[maxn];
int main(){
while(scanf("%d",&n)==1){
stack<int>s;
int A=1,B=1;
for(int i=1;i<=n;i++){
scanf("%d",&target[i]);
}
int ok=1;
while(B<=n){
if(A==target[B]){A++;B++;}//如果对应,直接放过去
else if(!s.empty()&&s.top()==target[B]){s.pop();B++;}//栈顶对应则出栈
else if(A<=n)s.push(A++);//对不上则入栈
else {ok=0;break;}
}
printf("%s\n",ok?"Yes":"No");
}
return 0;
}