思路:N辆火车循环N次 每次对应次序进栈 如果和目标B相同则出栈 注意需要while出栈 因为一个出栈后
可能原来不符合要求没有出栈的元素也符合要求了,如果循环N次后 栈中还有元素没有出去则不满足题意,
否则既可以以对应序列出栈
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[1001];
stack<int>s;
int n;
while(cin>>n&&n){
int flag=0;
for(;;){
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==0){flag=1;break;}
}
if(flag)break;
int A=1,B=1;
while(B<=n){
s.push(B++);
while(!s.empty()&&a[A]==s.top()){
// 和目标相同出栈 同时标注目标的A++指向下一个目标 注意要while 一个出栈后,原来在栈里面的也可能满足目标
A++;
s.pop();
}
}
if(s.empty()){
printf("Yes\n");
}
else printf("No\n");
while(!s.empty())s.pop();
}
cout<<endl;
}
return 0;
}